diff --git a/.agents/skills/mz-debug-ci/SKILL.md b/.agents/skills/mz-debug-ci/SKILL.md index d4f70fec3cf6f..0b9f361219561 100644 --- a/.agents/skills/mz-debug-ci/SKILL.md +++ b/.agents/skills/mz-debug-ci/SKILL.md @@ -24,6 +24,18 @@ If either tool is missing or unauthenticated, **stop immediately** and tell the Both `gh` and `bk` make network requests that are blocked by the default sandbox. All Bash commands in this workflow must use `dangerouslyDisableSandbox: true`. +## Search existing failures by pattern + +Search for already recorded failures in CI with a short, stable error substring: + +```bash +bin/ci-failures 'foobar' +``` + +Use `--search` for the global search. Narrow results with `--branch main`, +`--version`, `--issue`, `--test`, `--build`, `--start-date`, or `--end-date`. +The command explains how to create a token when needed. + ## Step 1: Extract PR number Parse `$ARGUMENTS` to get the PR number. Handle both formats: diff --git a/bin/ci-failures b/bin/ci-failures new file mode 100755 index 0000000000000..41557a608ea13 --- /dev/null +++ b/bin/ci-failures @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Copyright Materialize, Inc. and contributors. All rights reserved. +# +# Use of this software is governed by the Business Source License +# included in the LICENSE file at the root of this repository. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0. +# +# ci-failures - Search historical CI failures. + +exec "$(dirname "$0")"/pyactivate -m materialize.cli.ci_failures "$@" diff --git a/ci/mkpipeline.py b/ci/mkpipeline.py index d481d1966fcca..359dd669d1a4e 100644 --- a/ci/mkpipeline.py +++ b/ci/mkpipeline.py @@ -56,6 +56,24 @@ # err on the side of including too much rather than too little. CI_GLUE_GLOBS = ["bin", "ci", "misc/python/materialize/cli/ci_annotate_errors.py"] + +def ci_glue_globs(current_pipeline: str) -> list[str]: + """The glue globs relevant to `current_pipeline`, i.e. CI_GLUE_GLOBS with + the `pipeline.template.yml` of every *other* pipeline excluded. + + A pipeline template only affects its own pipeline, so a change to, say, the + Nightly template must not count as glue for the test pipeline and force it + to run every step untrimmed. The current pipeline's own template stays in + scope: a template edit can change a step's command in ways the input-based + trimming cannot detect.""" + ci_dir = Path(__file__).parent + return CI_GLUE_GLOBS + [ + f":(exclude)ci/{template.parent.name}/pipeline.template.yml" + for template in sorted(ci_dir.glob("*/pipeline.template.yml")) + if template.parent.name != current_pipeline + ] + + DEFAULT_AGENT = "hetzner-aarch64-4cpu-8gb" @@ -208,6 +226,7 @@ def main() -> int: lto = ( pipeline.get("env", {}).get("CI_LTO", 0) == 1 or bool(os.environ["BUILDKITE_TAG"]) + or args.pipeline == "spec-sheet" or ( not ui.env_is_truthy("BUILDKITE_PULL_REQUEST") and args.pipeline in ("nightly", "release-qualification") @@ -317,7 +336,7 @@ def fetch_hashes() -> None: print("Coverage/Sanitizer build, not trimming pipeline") elif os.environ["BUILDKITE_BRANCH"] == "main" or os.environ["BUILDKITE_TAG"]: print("On main branch or tag, so not trimming pipeline") - elif have_paths_changed(CI_GLUE_GLOBS): + elif have_paths_changed(ci_glue_globs(args.pipeline)): # We still execute pipeline trimming on a copy of the pipeline to # protect against bugs in the pipeline trimming itself. print("[DRY RUN] Trimming unchanged steps from pipeline") diff --git a/ci/nightly/pipeline.template.yml b/ci/nightly/pipeline.template.yml index 655c0ae37f885..52964f2a29bf5 100644 --- a/ci/nightly/pipeline.template.yml +++ b/ci/nightly/pipeline.template.yml @@ -1602,6 +1602,7 @@ steps: - ./ci/plugins/mzcompose: composition: launchdarkly-flag-consistency branches: "main" + skip: "TODO: Reenable when Dennis is back" - id: launchdarkly-reconnect label: "LaunchDarkly reconnect" diff --git a/console/src/api/cloudGlobalApi.ts b/console/src/api/cloudGlobalApi.ts index 50353d637f0a7..0c2b4b51ef3b6 100644 --- a/console/src/api/cloudGlobalApi.ts +++ b/console/src/api/cloudGlobalApi.ts @@ -7,10 +7,11 @@ // the Business Source License, use of this software will be governed // by the Apache License, Version 2.0. -import { formatRFC3339 } from "date-fns"; import createClient from "openapi-fetch"; import { NOT_SUPPORTED_MESSAGE } from "~/config/AppConfig"; +import { addUtcDays } from "~/util"; +import { formatDateInUtc } from "~/utils/dateFormat"; import { apiClient } from "./apiClient"; import { @@ -27,6 +28,13 @@ export type Region = components["schemas"]["Region"]; export type Regions = components["schemas"]["Paginated_Region"]; export type CreditBlock = components["schemas"]["CreditBlock"]; export type DailyCosts = components["schemas"]["DailyCostResponse"]; +export type CostBreakdownAccount = + components["schemas"]["CostBreakdownAccount"]; +export type CostBreakdownCluster = + components["schemas"]["CostBreakdownCluster"]; +export type CostBreakdownDay = components["schemas"]["CostBreakdownDay"]; +export type DailyCostBreakdown = + components["schemas"]["DailyCostBreakdownResponse"]; export type AllCosts = components["schemas"]["AllCosts"]; export type DailyCostKey = keyof components["schemas"]["AllCosts"]; export type Prices = @@ -147,23 +155,31 @@ export async function getCredits(requestOptions: OpenApiRequestOptions = {}) { return handleOpenApiResponseWithBody(data, response); } -export async function getDailyCosts( +export async function getCostsBreakdownDaily( startDate: Date, endDate: Date, requestOptions: OpenApiRequestOptions = {}, ) { const { headers, ...options } = requestOptions; - const { data, response } = await getClient().GET("/api/costs/daily", { - params: { - query: { - startDate: formatRFC3339(startDate), - endDate: formatRFC3339(endDate), + const { data, response } = await getClient().GET( + "/api/costs/breakdown/daily", + { + params: { + query: { + // Both query params are inclusive calendar days (bare `YYYY-MM-DD`, + // no time component — see `DateRange` in cloud's interface.rs), + // unlike every other date param on this client. `startDate`/`endDate` + // here are the internal [start, end) convention used throughout the + // console, so the exclusive `endDate` becomes the day before it. + startDate: formatDateInUtc(startDate, "yyyy-MM-dd"), + endDate: formatDateInUtc(addUtcDays(endDate, -1), "yyyy-MM-dd"), + }, }, + signal: requestOptions?.signal, + headers, + ...options, }, - signal: requestOptions?.signal, - headers, - ...options, - }); + ); return handleOpenApiResponseWithBody(data, response); } diff --git a/console/src/api/mocks/cloudGlobalApiHandlers.ts b/console/src/api/mocks/cloudGlobalApiHandlers.ts index 19a26df3e5635..1daeaaa071e9c 100644 --- a/console/src/api/mocks/cloudGlobalApiHandlers.ts +++ b/console/src/api/mocks/cloudGlobalApiHandlers.ts @@ -7,18 +7,18 @@ // the Business Source License, use of this software will be governed // by the Apache License, Version 2.0. -import { addDays, differenceInDays, formatISO, parseISO } from "date-fns"; +import { addDays, differenceInDays, formatISO } from "date-fns"; import { http, HttpResponse } from "msw"; import { CreditBlock, + DailyCostBreakdown, DailyCosts, Invoice, Organization, Region, Regions, } from "~/api/cloudGlobalApi"; -import { assert } from "~/util"; export const buildCloudRegionsReponse = ( options: { @@ -109,21 +109,11 @@ export function generateDailyCostResponsePayload( return response; } -export const buildDailyCostResponse = ( - options: { payload?: DailyCosts; status?: number } = {}, +export const buildDailyCostBreakdownResponse = ( + options: { payload?: DailyCostBreakdown; status?: number } = {}, ) => - http.get("*/api/costs/daily", (info) => { - let payload = options.payload; - if (!payload) { - const url = new URL(info.request.url); - const startParam = url.searchParams.get("startDate"); - assert(startParam !== null); - const startDate = parseISO(startParam); - const endParam = url.searchParams.get("endDate"); - assert(endParam !== null); - const endDate = parseISO(endParam); - payload = generateDailyCostResponsePayload(startDate, endDate); - } + http.get("*/api/costs/breakdown/daily", () => { + const payload: DailyCostBreakdown = options.payload ?? { days: [] }; return HttpResponse.json(payload, { status: options.status ?? 200 }); }); diff --git a/console/src/platform/billing/AccountSpendBreakdown.tsx b/console/src/platform/billing/AccountSpendBreakdown.tsx new file mode 100644 index 0000000000000..648c558ae1ee8 --- /dev/null +++ b/console/src/platform/billing/AccountSpendBreakdown.tsx @@ -0,0 +1,708 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { Box, chakra, HStack, Text, Tooltip, useTheme } from "@chakra-ui/react"; +import { AxisBottom, AxisLeft, AxisScale } from "@visx/axis"; +import { curveMonotoneX } from "@visx/curve"; +import { localPoint } from "@visx/event"; +import { Group } from "@visx/group"; +import ParentSize, { + ParentSizeProvidedProps, +} from "@visx/responsive/lib/components/ParentSize"; +import { scaleBand, scaleLinear, scaleOrdinal } from "@visx/scale"; +import { BarStack, LinePath } from "@visx/shape"; +import { useTooltip, useTooltipInPortal } from "@visx/tooltip"; +import { parseISO } from "date-fns"; +import { motion } from "framer-motion"; +import React, { useMemo } from "react"; + +import { + CostBreakdownAccount, + CostBreakdownCluster, + CostBreakdownDay, +} from "~/api/cloudGlobalApi"; +import ErrorBox from "~/components/ErrorBox"; +import { GraphEventOverlay, GraphTooltip } from "~/components/graphComponents"; +import { LoadingContainer } from "~/components/LoadingContainer"; +import { + EmptyListHeader, + EmptyListHeaderContents, + EmptyListWrapper, +} from "~/layouts/listPageComponents"; +import { MaterializeTheme } from "~/theme"; +import { DATE_FORMAT_SHORT, formatDateInUtc } from "~/utils/dateFormat"; +import { formatCurrency, formatPercentage } from "~/utils/format"; +import { + buildXYGraphLayoutProps, + calculateTooltipPosition, +} from "~/utils/graph"; + +import { ACCOUNT_SPEND_FETCH_ERROR_MESSAGE } from "./constants"; +import { + accountTotal, + clusterTotal, + pivotBreakdown, + shortAccountId, + StackedDailyRow, +} from "./dailyBreakdown"; +import { + LedgerCaret, + LedgerCell, + LedgerGroup, + LedgerTable, +} from "./LedgerTable"; +import RegionSelect from "./RegionSelect"; +import TimeRangeSelect from "./TimeRangeSelect"; + +const margin = { top: 10, right: 0, bottom: 36, left: 50 }; +const chartHeightPx = 245; +const SPARKLINE_STROKE_WIDTH = 2; + +type AccountSpendBreakdownProps = { + days: CostBreakdownDay[] | null; + isLoading: boolean; + isError: boolean; + error: Error | null; + regionFilter: "all" | string; + setRegionFilter: (val: "all" | string) => void; + timeRange: number; + setTimeRange: (val: number) => void; +}; + +/** + * A cluster's region-qualified label, mirroring the "Spend between …" table: + * "aws/us-east-1 / quickstart.r1", "… / Storage", "… / Egress". Compute rows + * carry the replica grouping key; storage/egress rows have an empty key and a + * `category` instead, so the two stay distinct. "Other" is a defensive + * fallback for the unexpected case where neither is set. + */ +function clusterLabel(cluster: CostBreakdownCluster): string { + const label = cluster.cluster_grouping_key || cluster.category || "Other"; + return `${cluster.region} / ${label}`; +} + +// TODO(SAS-145): `/api/costs/breakdown/daily` returns dollar amounts only, no +// usage quantities (Orb's per-price `quantity` is discarded server-side). Until +// SAS-145 threads it through, the Usage column renders this placeholder rather +// than a number. +const USAGE_PLACEHOLDER = "—"; + +// Cycled through, in order, to color account layers/legend/table swatches. Kept +// visually distinct; wraps if an org has more accounts than colors. +function useAccountColors(accountIds: string[]): Map { + const { colors } = useTheme(); + return useMemo(() => { + const palette = [ + colors.accent.purple, + colors.accent.green, + colors.accent.orange, + colors.accent.blue, + colors.accent.brightPurple, + colors.accent.red, + colors.accent.darkGreen, + colors.accent.darkYellow, + ]; + return new Map( + accountIds.map((id, ix) => [id, palette[ix % palette.length]]), + ); + }, [accountIds, colors]); +} + +function shortDate(dateString: string): string { + return formatDateInUtc(parseISO(dateString), "M/d"); +} + +function longDate(dateString: string): string { + return formatDateInUtc(parseISO(dateString), "M/d/yyyy"); +} + +type ChartTooltipData = { row: StackedDailyRow }; + +type AccountSpendChartGraphProps = ParentSizeProvidedProps & { + rows: StackedDailyRow[]; + accountIds: string[]; + colorFor: Map; +}; + +const AccountSpendChartGraph = ({ + rows, + accountIds, + colorFor, + width, + height, +}: AccountSpendChartGraphProps) => { + const { colors, textStyles } = useTheme(); + const { + svgProps, + axisLeftProps, + axisBottomProps, + graphEventOverlayProps, + xScaleRange, + yScaleRange, + } = useMemo( + () => buildXYGraphLayoutProps({ width, height, margin }), + [width, height], + ); + const { + tooltipOpen, + tooltipLeft, + tooltipTop, + tooltipData, + hideTooltip, + showTooltip, + } = useTooltip(); + const { containerRef, TooltipInPortal } = useTooltipInPortal({ + detectBounds: true, + scroll: true, + }); + + const maxDailyTotal = useMemo( + () => + rows.reduce((currentMax, row) => { + const total = accountIds.reduce( + (sum, id) => sum + (row[id] as number), + 0, + ); + return Math.max(currentMax, total); + }, 0), + [rows, accountIds], + ); + const barPadding = rows.length > 90 ? 0 : rows.length > 7 ? 0.25 : 0.15; + const xScale = useMemo( + () => + scaleBand({ + domain: rows.map((row) => shortDate(row.startDate)), + range: xScaleRange as [number, number], + padding: barPadding, + }), + [rows, xScaleRange, barPadding], + ); + const yScale = useMemo( + () => + scaleLinear({ + domain: [0, Math.ceil(maxDailyTotal)], + range: yScaleRange, + nice: true, + }), + [maxDailyTotal, yScaleRange], + ); + const colorScale = useMemo( + () => + scaleOrdinal({ + domain: accountIds, + range: accountIds.map((id) => colorFor.get(id) ?? colors.accent.purple), + }), + [accountIds, colorFor, colors], + ); + + // scaleBand has no invert() (which findNearestDatum requires), so map the + // pointer's x to a column by stepping from the band range's start. + const handlePointerMove = (event: React.PointerEvent) => { + const svgPoint = localPoint(event); + if (!svgPoint || rows.length === 0) return; + const [rangeStart] = xScale.range(); + const index = Math.min( + rows.length - 1, + Math.max(0, Math.floor((svgPoint.x - rangeStart) / xScale.step())), + ); + showTooltip({ + ...calculateTooltipPosition({ event }), + tooltipData: { row: rows[index] }, + }); + }; + + return ( + + + + + data={rows} + keys={accountIds} + x={(row) => shortDate(row.startDate)} + xScale={xScale} + yScale={yScale} + color={colorScale} + value={(row, key) => row[key] as number} + > + {(barStacks) => + barStacks.map((barStack) => + barStack.bars.map((bar) => { + const isHovered = tooltipData?.row === rows[bar.index]; + const isDemoted = !isHovered && tooltipOpen; + return ( + + ); + }), + ) + } + + + + > + {...axisLeftProps} + hideTicks + scale={yScale} + stroke={colors.border.secondary} + tickFormat={(value, ix, values) => { + if (ix > 0 && ix < values.length - 1) { + return ""; + } + return formatCurrency(value as number, { + trailingZeroDisplay: "stripIfInteger", + useGrouping: false, + notation: "compact", + }); + }} + tickLabelProps={() => ({ + fill: colors.foreground.primary, + fontSize: textStyles["text-small"].fontSize, + textAnchor: "end", + })} + /> + > + {...axisBottomProps} + hideTicks + scale={xScale} + stroke={colors.border.secondary} + labelOffset={8} + tickLabelProps={() => ({ + fill: colors.foreground.primary, + fontSize: textStyles["text-small"].fontSize, + dy: "4px", + textAnchor: "middle", + })} + /> + + hideTooltip()} + /> + + {tooltipOpen && + tooltipData && + tooltipTop != null && + tooltipLeft != null && ( + + + + {longDate(tooltipData.row.startDate)} + + {accountIds + .filter((id) => (tooltipData.row[id] as number) > 0) + .map((id) => ( + + + + {shortAccountId(id)} + + + {formatCurrency(tooltipData.row[id] as number)} + + + ))} + + + )} + + ); +}; + +const AccountSpendChart = (props: { + rows: StackedDailyRow[]; + accountIds: string[]; + colorFor: Map; +}) => ( + + + {(parent) => ( + + )} + + +); + +const TrendSparkline = ({ + points, + color, +}: { + points: number[]; + color: string; +}) => { + const dataPoints = points.map((value, offset) => ({ offset, value })); + const max = Math.max(0, ...points); + return ( + + + {(parent) => { + const xScale = scaleLinear({ + domain: [0, Math.max(1, dataPoints.length - 1)], + range: [0, parent.width], + }); + const yScale = scaleLinear({ + domain: [0, max], + range: [ + parent.height - SPARKLINE_STROKE_WIDTH / 2, + SPARKLINE_STROKE_WIDTH / 2, + ], + }); + return ( + + xScale(d.offset)} + y={(d) => yScale(d.value)} + /> + + ); + }} + + + ); +}; + +/** + * One account rendered as an expandable ledger group: the account is the + * always-visible parent row (caret + color swatch + label, its share of the + * period total, a daily-total trend, and its total cost) and its clusters are + * indented, region-qualified child rows revealed by the disclosure. Groups + * default open so the whole ledger is visible without interaction. + */ +const AccountLedgerGroup = ({ + account, + total, + share, + trend, + color, +}: { + account: CostBreakdownAccount; + total: number; + share: number; + trend: number[]; + color: string; +}) => { + return ( + ( + <> + + + + + + {shortAccountId(account.external_customer_id)} + + + + + + {formatPercentage(share, 1)} + + + + + + {formatCurrency(total)} + + + )} + > + {account.clusters.map((cluster, ix) => { + const isLastElement = ix === account.clusters.length - 1; + return ( + + + {clusterLabel(cluster)} + + + {USAGE_PLACEHOLDER} + + + + + {formatCurrency(clusterTotal(cluster.amounts))} + + + ); + })} + + ); +}; + +/** + * Direction-A unified ledger (SAS-128): one table listing every account + * (biggest spender first) as an expandable row — its share of the period total, + * a daily-total trend, and its cost — expanding to its region-qualified + * per-cluster costs. A final Total row sums every account. + */ +const UnifiedLedger = ({ + accounts, + series, + colorFor, +}: { + accounts: CostBreakdownAccount[]; + series: Map; + colorFor: Map; +}) => { + const { colors } = useTheme(); + const totals = accounts.map((account) => accountTotal(account)); + const grandTotal = totals.reduce((sum, total) => sum + total, 0); + + return ( + + {accounts.map((account, ix) => { + const total = totals[ix]; + const share = grandTotal > 0 ? total / grandTotal : 0; + return ( + + ); + })} + + Total + + + + + {formatCurrency(grandTotal)} + + + + ); +}; + +/** + * Per-account spend (Direction A / SAS-128). A stacked-by-account daily chart + * over a single unified ledger: every account is an expandable row (share, + * trend, cost) that opens to its region-qualified per-cluster costs. Sourced + * from `/api/costs/breakdown/daily` via `useDailyCostsBreakdown`. + * + * The per-cluster Usage column is a placeholder (SAS-145) until the endpoint + * carries usage quantities; the mock's Compute/Storage resource drilldown + * (replica size) needs per-cluster replica sizes the endpoint does not yet + * carry either, so that remains a separate follow-up. + */ +// Shared pivot of the dense day series into everything the chart and the +// ledger render: account order (biggest spender first), colors, stacked chart +// rows, per-account sparkline series, aggregated accounts, period total, and +// the date range. The chart and the ledger live in separate grid cells +// (SAS-154), so both derive from this one hook and can never disagree on +// ordering or colors. +function useAccountSpendPivot( + days: CostBreakdownDay[] | null, + regionFilter: "all" | string, +) { + const { accountIds, rows, orderedAccounts, series, totalSpend } = useMemo( + () => pivotBreakdown(days, regionFilter), + [days, regionFilter], + ); + const colorFor = useAccountColors(accountIds); + + const rangeStart = days?.length + ? formatDateInUtc(parseISO(days[0].startDate), DATE_FORMAT_SHORT) + : null; + const rangeEnd = days?.length + ? formatDateInUtc( + parseISO(days[days.length - 1].startDate), + DATE_FORMAT_SHORT, + ) + : null; + + return { + accountIds, + rows, + colorFor, + series, + orderedAccounts, + totalSpend, + rangeStart, + rangeEnd, + }; +} + +const EmptyState = () => ( + + + + + +); + +const AccountSpendBreakdown = ({ + days, + isLoading, + isError, + regionFilter, + setRegionFilter, + timeRange, + setTimeRange, +}: AccountSpendBreakdownProps) => { + const { accountIds, rows, colorFor, totalSpend } = useAccountSpendPivot( + days, + regionFilter, + ); + + return ( + + +
+ +
+
+ +
+
+ {isLoading ? ( + // Reserve the chart's height so the section doesn't jump when the + // data lands. + + ) : isError ? ( + + ) : !days || accountIds.length === 0 ? ( + + ) : ( + + + {formatCurrency(totalSpend)} + + + + )} +
+ ); +}; + +export type AccountSpendLedgerProps = { + days: CostBreakdownDay[] | null; + isLoading: boolean; + isError: boolean; + regionFilter: "all" | string; +}; + +/** + * The "Spend between …" heading and the unified per-account ledger, split from + * AccountSpendBreakdown so the page can give the table its own full-width grid + * row beneath the chart and Plan details columns (SAS-154). Loading, error, + * and empty states are surfaced by AccountSpendBreakdown, so this renders + * nothing in those states. + */ +export const AccountSpendLedger = ({ + days, + isLoading, + isError, + regionFilter, +}: AccountSpendLedgerProps) => { + const { colors } = useTheme(); + const { + accountIds, + colorFor, + series, + orderedAccounts, + rangeStart, + rangeEnd, + } = useAccountSpendPivot(days, regionFilter); + + if (isLoading || isError || !days || accountIds.length === 0) { + return null; + } + + return ( + + + Spend between{" "} + {rangeStart && rangeEnd && ( + <> + + {rangeStart} + {" "} + and{" "} + + {rangeEnd} + + + )} + + + + ); +}; + +export default AccountSpendBreakdown; diff --git a/console/src/platform/billing/BillingPage.tsx b/console/src/platform/billing/BillingPage.tsx index b2badfc5309c7..41a65dfe46ef5 100644 --- a/console/src/platform/billing/BillingPage.tsx +++ b/console/src/platform/billing/BillingPage.tsx @@ -526,31 +526,6 @@ const BillingDetails = ({ ); }; -const OnDemandPricing = () => { - const { colors } = useTheme(); - return ( - <> - - On-Demand Pricing - - - The following represents our on-demand pricing structure for compute, - storage, and network resources. To calculate your estimated compute - costs, multiply your projected compute credit usage by the listed price - per credit. - - - - - - ); -}; - const CTABanner = ({ organization, onUpgradeAndPay, @@ -687,7 +662,6 @@ const BillingPage = ({ )} - - - diff --git a/console/src/platform/billing/DailyUsageChart.test.tsx b/console/src/platform/billing/DailyUsageChart.test.tsx deleted file mode 100644 index 3e950d8bdae4d..0000000000000 --- a/console/src/platform/billing/DailyUsageChart.test.tsx +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright Materialize, Inc. and contributors. All rights reserved. -// -// Use of this software is governed by the Business Source License -// included in the LICENSE file. -// -// As of the Change Date specified in that file, in accordance with -// the Business Source License, use of this software will be governed -// by the Apache License, Version 2.0. - -import { render, screen } from "@testing-library/react"; -import { TooltipInPortalProps } from "@visx/tooltip/lib/hooks/useTooltipInPortal"; -import React, { ReactElement } from "react"; - -import { DailyCosts } from "~/api/cloudGlobalApi"; -import { createProviderWrapper } from "~/test/utils"; - -import { - DailyUsageChartTooltip, - LegendEntry, - TooltipData, -} from "./DailyUsageChart"; -import { aggregateByDay } from "./utils"; - -const Wrapper = await createProviderWrapper(); - -const renderComponent = (element: ReactElement) => { - return render({element}); -}; - -const legendData: LegendEntry[] = [ - { key: "compute", label: "Compute", color: "purple" }, - { key: "storage", label: "Storage", color: "gray" }, -]; - -const mockData: TooltipData = { - bar: { - day: { - startDate: "2024-01-13T00:00:00Z", - endDate: "2024-01-14T00:00:00Z", - subtotal: "1.23", - total: "1.23", - costs: { - compute: { - subtotal: "1.00", - total: "1.00", - prices: [ - { - subtotal: "0.50", - regionId: "aws/us-east-1", - unitAmount: "1.00", - replicaSize: "xsmall", - }, - { - subtotal: "0.50", - regionId: "aws/eu-west-1", - unitAmount: "1.00", - replicaSize: "small", - }, - ], - }, - storage: { - subtotal: "1.23", - total: "1.23", - prices: [ - { subtotal: "1.00", regionId: "aws/us-east-1", unitAmount: "1.00" }, - { subtotal: "0.23", regionId: "aws/eu-west-1", unitAmount: "1.00" }, - ], - }, - }, - }, - index: 0, - height: 0, - width: 0, - x: 0, - y: 0, - color: "gray", - }, - hoveredIndex: 0, -}; - -const MockTooltip = ({ - children, - ...props -}: React.PropsWithChildren) => { - return
{children}
; -}; - -describe("UsageChart", () => { - it("tooltip displays two content columns when not filtering by region", async () => { - renderComponent( - , - ); - const startDate = await screen.findByTestId("chart-tooltip-start-date"); - expect(startDate).toHaveTextContent("1/13/2024"); - const table = await screen.findByTestId("chart-tooltip-table"); - const headerCells = Array.from(table.querySelectorAll("th")); - expect(headerCells).toHaveLength(3); - expect(headerCells[1]).toHaveTextContent("aws/us-east-1"); - expect(headerCells[2]).toHaveTextContent("aws/eu-west-1"); - const tableCells = Array.from(table.querySelectorAll("td")); - expect(tableCells).toHaveLength(6); - expect( - parseFloat(tableCells[1].textContent?.replace("$", "") ?? "0") + - parseFloat(tableCells[2].textContent?.replace("$", "") ?? "0"), - ).toEqual(parseFloat(mockData.bar.day.costs.compute.subtotal)); - expect( - parseFloat(tableCells[4].textContent?.replace("$", "") ?? "0") + - parseFloat(tableCells[5].textContent?.replace("$", "") ?? "0"), - ).toEqual(parseFloat(mockData.bar.day.costs.storage.subtotal)); - }); - - it("tooltip displays a single content column when filtering by region", async () => { - renderComponent( - , - ); - const table = await screen.findByTestId("chart-tooltip-table"); - const headerCells = Array.from(table.querySelectorAll("th")); - expect(headerCells.length).toEqual(2); - expect(headerCells[1]).toBeEmptyDOMElement(); - }); - - it("daily costs are aggregated by day", () => { - const costData: DailyCosts["daily"] = [ - { - startDate: "2024-01-12T00:00:00Z", - endDate: "2024-01-13T12:00:00Z", - subtotal: "1.00", - total: "1.00", - costs: { - compute: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.20", - subtotal: "0.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - { - startDate: "2024-01-13T00:00:00Z", - endDate: "2024-01-13T12:00:00Z", - subtotal: "1.00", - total: "1.00", - costs: { - compute: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.20", - subtotal: "0.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - { - startDate: "2024-01-13T12:00:00Z", - endDate: "2024-01-14T00:00:00Z", - subtotal: "2.00", - total: "2.00", - costs: { - compute: { - subtotal: "1.50", - total: "1.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.50", - subtotal: "1.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - ]; - const aggregated = aggregateByDay(costData); - expect(aggregated).toHaveLength(2); - - const day1 = aggregated[0]; - expect(day1.startDate).toEqual("2024-01-12T00:00:00Z"); - expect(day1.endDate).toEqual("2024-01-13T00:00:00Z"); - expect(day1.total).toEqual("1.00"); - expect(day1.subtotal).toEqual("1.00"); - expect(day1.costs.compute.subtotal).toEqual("0.50"); - expect(day1.costs.compute.total).toEqual("0.50"); - expect(day1.costs.compute.prices).toEqual([ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.20", - subtotal: "0.50", - }, - ]); - expect(day1.costs.storage.subtotal).toEqual("0.50"); - expect(day1.costs.storage.total).toEqual("0.50"); - expect(day1.costs.storage.prices).toEqual([ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ]); - - const day2 = aggregated[1]; - expect(day2.startDate).toEqual("2024-01-13T00:00:00Z"); - expect(day2.endDate).toEqual("2024-01-14T00:00:00Z"); - expect(parseFloat(day2.total)).toEqual(3); - expect(parseFloat(day2.subtotal)).toEqual(3); - expect(parseFloat(day2.costs.compute.subtotal)).toEqual(2); - expect(parseFloat(day2.costs.compute.total)).toEqual(2); - expect(day2.costs.compute.prices).toEqual([ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "-1", - subtotal: "2", - }, - ]); - expect(parseFloat(day2.costs.storage.subtotal)).toEqual(1); - expect(parseFloat(day2.costs.storage.total)).toEqual(1); - expect(day2.costs.storage.prices).toEqual([ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "1", - }, - ]); - }); -}); diff --git a/console/src/platform/billing/DailyUsageChart.tsx b/console/src/platform/billing/DailyUsageChart.tsx deleted file mode 100644 index 4245d4896227b..0000000000000 --- a/console/src/platform/billing/DailyUsageChart.tsx +++ /dev/null @@ -1,425 +0,0 @@ -// Copyright Materialize, Inc. and contributors. All rights reserved. -// -// Use of this software is governed by the Business Source License -// included in the LICENSE file. -// -// As of the Change Date specified in that file, in accordance with -// the Business Source License, use of this software will be governed -// by the Apache License, Version 2.0. - -import { - Box, - HStack, - StackProps, - Table, - TableContainer, - Tbody, - Td, - Text, - TextProps, - Th, - Thead, - Tr, - useTheme, -} from "@chakra-ui/react"; -import { AxisBottom, AxisLeft, AxisScale } from "@visx/axis"; -import { Group } from "@visx/group"; -import ParentSize, { - ParentSizeProvidedProps, -} from "@visx/responsive/lib/components/ParentSize"; -import { scaleBand, scaleLinear, scaleOrdinal } from "@visx/scale"; -import { BarStack } from "@visx/shape"; -import { useTooltip, useTooltipInPortal } from "@visx/tooltip"; -import { TooltipInPortalProps } from "@visx/tooltip/lib/hooks/useTooltipInPortal"; -import { parseISO } from "date-fns/parseISO"; -import { motion } from "framer-motion"; -import { useAtom } from "jotai"; -import React, { useMemo } from "react"; - -import { DailyCostKey, DailyCosts } from "~/api/cloudGlobalApi"; -import { GraphTooltip } from "~/components/graphComponents"; -import { cloudRegionsSelector, getRegionId } from "~/store/cloudRegions"; -import { MaterializeTheme } from "~/theme"; -import { formatDateInUtc } from "~/utils/dateFormat"; -import { formatCurrency } from "~/utils/format"; -import { - buildXYGraphLayoutProps, - calculateTooltipPosition, -} from "~/utils/graph"; - -import { aggregateByDay } from "./utils"; - -const margin = { top: 10, right: 0, bottom: 36, left: 50 }; -export const legendHeightPx = 18; -export const chartHeightPx = 245; -const TOOLTIP_DISMISS_TIMEOUT_MS = 300; - -export type DailyUsageChartProps = { - data: DailyCosts["daily"]; - region: "all" | string; -}; - -function extractFormattedDateShort(dateString: string): string { - const date = parseISO(dateString); - return formatDateInUtc(date, "M/d"); -} - -function extractFormattedDateLong(dateString: string): string { - const date = parseISO(dateString); - return formatDateInUtc(date, "M/d/yyyy"); -} - -function getKeyCosts( - day: DailyCosts["daily"][0], - costKey: DailyCostKey, - region: "all" | string, -): number { - return day.costs[costKey].prices.reduce((acc, price) => { - if (region === "all" || price.regionId === region) { - acc += parseFloat(price.subtotal); - } - return acc; - }, 0); -} - -export type TooltipData = { - bar: { - day: DailyCosts["daily"][0]; - index: number; - height: number; - width: number; - x: number; - y: number; - color: string; - }; - hoveredIndex: number; -}; - -function calculateMaxDailySpend( - data: DailyCosts["daily"], - region: "all" | string, -): number { - return data.reduce((currentMax, day) => { - if (region === "all") { - return Math.max(currentMax, parseFloat(day.subtotal)); - } - let totalPrice = 0; - for (const costKey of ["compute", "storage"] as const) { - for (const price of day.costs[costKey].prices) { - if (price.regionId === region) { - totalPrice += parseFloat(price.subtotal); - } - } - } - return Math.max(currentMax, totalPrice); - }, 0); -} - -function calculateBarPadding(dayCount: number): number { - if (dayCount > 90) { - return 0; - } else if (dayCount > 7) { - return 0.25; - } - return 0.15; -} - -export type LegendEntry = { - key: DailyCostKey; - label: string; - color: string; -}; - -type DailyUsageChartTooltipProps = { - top: number; - left: number; - legendData: LegendEntry[]; - tooltipData: TooltipData; - availableRegions: string[]; - component: React.FC; - allRegions: boolean; -}; - -const DailyUsageChartTooltip = ({ - legendData, - tooltipData, - availableRegions, - allRegions, - ...props -}: DailyUsageChartTooltipProps) => { - const today = tooltipData.bar.day; - return ( - - - - - - - - {availableRegions.map((region) => ( - - ))} - - - - {legendData.map(({ key, label, color }) => ( - - - {availableRegions.map((region) => ( - - ))} - - ))} - -
- {extractFormattedDateLong(today.startDate)} - - {availableRegions.length > 1 && region} -
- {label} - - {formatCurrency(getKeyCosts(today, key, region))} -
-
-
-
- ); -}; - -const DailyUsageChartGraph = ({ - data, - height, - width, - region, -}: DailyUsageChartProps & ParentSizeProvidedProps) => { - const { svgProps, axisLeftProps, axisBottomProps, xScaleRange, yScaleRange } = - React.useMemo( - () => - buildXYGraphLayoutProps({ - width: width, - height: height, - margin: margin, - }), - [width, height], - ); - const { colors, textStyles } = useTheme(); - const { - tooltipOpen, - tooltipLeft, - tooltipTop, - tooltipData, - hideTooltip, - showTooltip, - } = useTooltip(); - const { containerRef: tooltipContainerRef, TooltipInPortal } = - useTooltipInPortal({ - detectBounds: true, - scroll: true, - }); - const aggregated = useMemo(() => aggregateByDay(data), [data]); - const maxAmount = useMemo( - () => calculateMaxDailySpend(aggregated, region), - [aggregated, region], - ); - const [cloudRegions] = useAtom(cloudRegionsSelector); - const availableRegions = - region === "all" - ? Array.from(cloudRegions.values()).map((details) => getRegionId(details)) - : [region]; - const barPadding = calculateBarPadding(aggregated.length); - const xScale = useMemo( - () => - scaleBand({ - domain: aggregated.map((day) => - extractFormattedDateShort(day.startDate), - ), - range: xScaleRange as [number, number], - padding: barPadding, - }), - [aggregated, xScaleRange, barPadding], - ); - const yScale = useMemo( - () => - scaleLinear({ - // We apply a ceiling to the number so we can drop the fractional amounts - // from the legend - domain: [0, Math.ceil(maxAmount)], - range: yScaleRange, - // We want a "nice" looking tick scale that ends on a good number. - nice: true, - }), - [maxAmount, yScaleRange], - ); - const legendData: LegendEntry[] = [ - { key: "compute", label: "Compute", color: colors.accent.purple }, - { key: "storage", label: "Storage", color: colors.border.secondary }, - ]; - const colorScale = scaleOrdinal({ - domain: legendData.map((cat) => cat.label), - range: legendData.map((cat) => cat.color), - }); - const tooltipTimeoutRef = React.useRef(); - return ( - - - {legendData.map(({ key, label, color }) => ( - - {label} - - ))} - - - - - data={aggregated} - keys={["compute", "storage"]} - x={(day) => extractFormattedDateShort(day.startDate)} - xScale={xScale} - yScale={yScale} - color={colorScale} - value={(datum, key) => getKeyCosts(datum, key, region)} - > - {(barStacks) => - barStacks.map((barStack) => - barStack.bars.map((bar, stackIx) => { - const isHighlighted = tooltipData?.hoveredIndex === stackIx; - const isDemoted = !isHighlighted && tooltipOpen; - return ( - { - tooltipTimeoutRef.current = window.setTimeout( - () => { - hideTooltip(); - }, - // Hold off on dismissing the tooltip to give a little - // accuracy leeway to users when they're mousing over - // the bar. - TOOLTIP_DISMISS_TIMEOUT_MS, - ); - }} - onMouseMove={(event) => { - if (tooltipTimeoutRef.current) { - clearTimeout(tooltipTimeoutRef.current); - tooltipTimeoutRef.current = undefined; - } - showTooltip({ - ...calculateTooltipPosition({ event }), - tooltipData: { - bar: { - day: aggregated[stackIx], - index: barStack.index, - x: bar.x, - y: bar.y, - height: bar.height, - width: bar.width, - color: bar.color, - }, - hoveredIndex: stackIx, - }, - }); - }} - /> - ); - }), - ) - } - - - - > - {...axisLeftProps} - hideTicks - scale={yScale} - stroke={colors.border.secondary} - tickFormat={(value, ix, values) => { - // Only label the first and last ticks. - if (ix > 0 && ix < values.length - 1) { - return ""; - } - return formatCurrency(value, { - trailingZeroDisplay: "stripIfInteger", - useGrouping: false, - notation: "compact", - }); - }} - tickLabelProps={() => ({ - fill: colors.foreground.primary, - fontSize: textStyles["text-small"].fontSize, - textAnchor: "end", - })} - /> - > - {...axisBottomProps} - hideTicks - scale={xScale} - stroke={colors.border.secondary} - labelOffset={8} - tickLabelProps={() => ({ - fill: colors.foreground.primary, - fontSize: textStyles["text-small"].fontSize, - dy: "4px", - textAnchor: "middle", - })} - /> - - - {tooltipTop && tooltipLeft && tooltipOpen && tooltipData && ( - - )} - - ); -}; - -const LegendItem = ({ - children, - color, - textProps, - ...props -}: React.PropsWithChildren< - { - color: string; - textProps?: TextProps; - } & StackProps ->) => { - return ( - - - {children} - - ); -}; - -const DailyUsageChart = (props: DailyUsageChartProps) => { - return ( - - {(parentSizeState) => { - return ( - - ); - }} - - ); -}; - -export { DailyUsageChartTooltip }; -export default DailyUsageChart; diff --git a/console/src/platform/billing/LedgerTable.tsx b/console/src/platform/billing/LedgerTable.tsx new file mode 100644 index 0000000000000..0b8386d31083d --- /dev/null +++ b/console/src/platform/billing/LedgerTable.tsx @@ -0,0 +1,250 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { + Box, + BoxProps, + Collapse, + Grid, + GridProps, + useDisclosure, + useTheme, +} from "@chakra-ui/react"; +import React, { PropsWithChildren, ReactNode } from "react"; + +import ChevronRightIcon from "~/svg/ChevronRightIcon"; +import { MaterializeTheme } from "~/theme"; +import { isSafari } from "~/util"; + +// Cell padding + caret width + caret/label gap, so an indented child label +// lines up just past its parent row's caret. +const INDENTED_PADDING_LEFT = 4 + 4 + 2; + +const baseCellStyles = { + px: 4, + my: "auto", + display: "flex", + alignItems: "center", + height: 8, + borderBottom: "1px solid", +} as const; + +export interface LedgerCellProps extends PropsWithChildren, BoxProps { + variant?: "row" | "columnHeader" | "groupHeader" | "total"; + /** Right-align numeric content (costs, shares). */ + numeric?: boolean; + /** Indent a child row's first cell past the parent's caret. */ + indented?: boolean; + /** Last child row of a group: taller, with bottom padding. */ + isLastRow?: boolean; +} + +export const LedgerCell = ({ + variant = "row", + numeric, + indented, + isLastRow, + children, + ...rest +}: LedgerCellProps) => { + const { colors } = useTheme(); + const variantStyles = { + row: { + borderColor: "transparent", + ...(isLastRow && { height: 10, paddingBottom: "8px" }), + }, + columnHeader: { + height: 10, + textStyle: "text-ui-med", + color: colors.foreground.secondary, + borderColor: colors.border.secondary, + }, + groupHeader: { + height: 16, + textStyle: "heading-xs", + borderBottom: 0, + borderTop: "1px solid", + borderColor: colors.border.secondary, + }, + total: { + height: 12, + textStyle: "text-ui-med", + borderBottom: 0, + borderTop: "1px solid", + borderColor: colors.border.secondary, + }, + }[variant]; + return ( + + {children} + + ); +}; + +export interface LedgerColumn { + label: ReactNode; + numeric?: boolean; + /** Indent to align with an indented child row's label below it. */ + indented?: boolean; +} + +export interface LedgerTableProps extends PropsWithChildren, GridProps { + /** grid-template-columns; every row must render one cell per column. */ + templateColumns: string; + columns: LedgerColumn[]; +} + +/** + * CSS-grid table for grouped spend ledgers. A grid rather than Chakra Table + * or UniversalTable because group collapse must keep child cells + * column-aligned mid-animation, which needs subgrid rows — can't + * animate a run of s. See SafariSafeCollapse. + */ +export const LedgerTable = ({ + templateColumns, + columns, + children, + ...gridProps +}: LedgerTableProps) => { + const { colors } = useTheme(); + return ( + + + {columns.map((column, ix) => ( + + {column.label} + + ))} + + {children} + + ); +}; + +/** Disclosure caret for a group header's first cell. */ +export const LedgerCaret = ({ isOpen }: { isOpen: boolean }) => ( + +); + +export interface LedgerGroupProps extends PropsWithChildren { + /** + * Cells of the always-visible parent row. Put + * `` at the start of the first cell. + */ + renderHeader: (isOpen: boolean) => ReactNode; + /** Child row count; bounds the collapse animation height. */ + rowCount: number; + defaultIsOpen?: boolean; + /** Keep the group collapsed while its data is still loading. */ + isLoading?: boolean; + "data-testid"?: string; + /** data-testid for the collapsible child-row region. */ + contentTestId?: string; +} + +/** An expandable group: clickable parent row plus collapsible child rows. */ +export const LedgerGroup = ({ + renderHeader, + rowCount, + defaultIsOpen = true, + isLoading, + "data-testid": testId, + contentTestId, + children, +}: LedgerGroupProps) => { + const { isOpen, onToggle } = useDisclosure({ defaultIsOpen }); + return ( + <> + { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + onToggle(); + } + }} + cursor="pointer" + data-testid={testId} + > + {renderHeader(isOpen)} + + + {children} + + + ); +}; + +/** + * Safari fails to layout subgrid elements inside a Collapse; fall back to + * show/hide there. + * https://stackoverflow.com/q/77927259/214197 + */ +export const SafariSafeCollapse = ({ + children, + isCollapsed, + rowCount, + ...otherProps +}: PropsWithChildren<{ isCollapsed: boolean; rowCount: number }>) => { + const collapseProps = { + display: "grid", + gridTemplateColumns: "subgrid", + gridColumn: "1 / -1", + maxHeight: rowCount * 32 + 8, + }; + if (isSafari()) { + return ( + + {children} + + ); + } + return ( + + {children} + + ); +}; diff --git a/console/src/platform/billing/PlanDetails.test.tsx b/console/src/platform/billing/PlanDetails.test.tsx index aea11c1a9dea6..516290a1f7232 100644 --- a/console/src/platform/billing/PlanDetails.test.tsx +++ b/console/src/platform/billing/PlanDetails.test.tsx @@ -23,8 +23,9 @@ import { setFakeEnvironment, } from "~/test/utils"; +import { ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS } from "./constants"; import { UpgradedPlanDetails } from "./PlanDetails"; -import { getTimeRange } from "./queries"; +import { getDayAlignedRange } from "./queries"; import { summarizePlanCosts } from "./utils"; const Wrapper = await createProviderWrapper({ @@ -42,7 +43,9 @@ describe("UpgradedPlanDetails", () => { }); it("renders successfully for all regions", async () => { - const [startDate, endDate] = getTimeRange(7); + const [startDate, endDate] = getDayAlignedRange( + ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS, + ); const payload = generateDailyCostResponsePayload(startDate, endDate); renderComponent( , @@ -53,7 +56,9 @@ describe("UpgradedPlanDetails", () => { }); it("hides region breakdown when filtering regions", async () => { - const [startDate, endDate] = getTimeRange(7); + const [startDate, endDate] = getDayAlignedRange( + ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS, + ); const payload = generateDailyCostResponsePayload(startDate, endDate); renderComponent( { +const PlanDetailsContainer = ({ + children, + testId = "plan-details", +}: PropsWithChildren<{ testId?: string }>) => { const { colors } = useTheme(); return ( sum + accountTotal(account), 0); +} + +/** + * Plan-details box for the Direction-A account-spend section. Mirrors + * `UpgradedPlanDetails`, but sources spend from the per-account daily breakdown + * (`/api/costs/breakdown/daily`) rather than `/api/costs/daily`, so it carries + * no dependency on the legacy daily-costs endpoint. Plan type and balance come + * from the organization and credits, so the box still renders while the + * breakdown is loading or empty. `days` is the selected window (drives total + * spend and daily average); `last30Days` is a fixed 30-day window. Both are + * restricted to `regionFilter` so the totals here match the ledger. + */ +export const AccountSpendPlanDetails = ({ + days, + last30Days, + regionFilter, +}: { + days: CostBreakdownDay[] | null; + last30Days: CostBreakdownDay[] | null; + regionFilter: "all" | string; +}) => { + const { organization } = useCurrentOrganization(); + const { colors } = useTheme(); + const { data: creditBalance } = useCreditBalance(); + + const filteredDays = useMemo( + () => (days ? filterDaysByRegion(days, regionFilter) : null), + [days, regionFilter], + ); + const filteredLast30Days = useMemo( + () => (last30Days ? filterDaysByRegion(last30Days, regionFilter) : null), + [last30Days, regionFilter], + ); + const total = useMemo(() => breakdownTotal(filteredDays), [filteredDays]); + // The window is dense (one bucket per UTC day), so `days.length` is the day + // count the average divides by. + const dailyAverage = + total !== null && filteredDays ? total / filteredDays.length : null; + const last30 = useMemo( + () => breakdownByAccount(filteredLast30Days), + [filteredLast30Days], + ); + + return ( + + + Plan details + + + + + + + + + + + {total !== null && ( + + + + )} + {last30 && ( + + + {last30.accounts.length > 1 && + last30.accounts.map((account) => ( + + ))} + + )} + {dailyAverage !== null && ( + + + + )} + + + + + + + + + Looking to cancel your subscription? + + + Contact Support ⟶ + + + + ); +}; + export const EvaluationPlanDetails = ({ upgradeButtonProps, canManagePayments = true, diff --git a/console/src/platform/billing/PricingPage.tsx b/console/src/platform/billing/PricingPage.tsx new file mode 100644 index 0000000000000..1c82e2b810dea --- /dev/null +++ b/console/src/platform/billing/PricingPage.tsx @@ -0,0 +1,44 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { Text, useTheme } from "@chakra-ui/react"; +import React from "react"; + +import IFrameWrapper from "~/components/IFrameWrapper"; +import { MainContentContainer } from "~/layouts/BaseLayout"; +import { MaterializeTheme } from "~/theme"; + +const PricingPage = () => { + const { colors } = useTheme(); + return ( + + + On-Demand Pricing + + + The following represents our on-demand pricing structure for compute, + storage, and network resources. To calculate your estimated compute + costs, multiply your projected compute credit usage by the listed price + per credit. + + {/* IFrameWrapper passes width/height straight through as native + iframe attributes, not CSS, so this must be a plain pixel number + (browsers parse legacy iframe dimension attributes leniently, + silently truncating anything else, e.g. "80vh" to 80 pixels). */} + + + ); +}; + +export default PricingPage; diff --git a/console/src/platform/billing/SpendBreakdown.test.tsx b/console/src/platform/billing/SpendBreakdown.test.tsx deleted file mode 100644 index a08760adadcd2..0000000000000 --- a/console/src/platform/billing/SpendBreakdown.test.tsx +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright Materialize, Inc. and contributors. All rights reserved. -// -// Use of this software is governed by the Business Source License -// included in the LICENSE file. -// -// As of the Change Date specified in that file, in accordance with -// the Business Source License, use of this software will be governed -// by the Apache License, Version 2.0. - -import { render, screen } from "@testing-library/react"; -import { parseISO } from "date-fns"; -import React, { ReactElement } from "react"; - -import { DailyCosts } from "~/api/cloudGlobalApi"; -import { - buildCloudRegionsReponse, - buildInvoicesResponse, - generateDailyCostResponsePayload, -} from "~/api/mocks/cloudGlobalApiHandlers"; -import server from "~/api/mocks/server"; -import { - createProviderWrapper, - healthyEnvironment, - setFakeEnvironment, -} from "~/test/utils"; -import { assert } from "~/util"; - -import SpendBreakdown from "./SpendBreakdown"; -import { summarizeResourceCosts } from "./utils"; - -const Wrapper = await createProviderWrapper({ - initializeState: ({ set }) => - setFakeEnvironment(set, "aws/us-east-1", healthyEnvironment), -}); - -const renderComponent = (element: ReactElement) => { - return render({element}); -}; - -describe("SpendBreakdown", () => { - beforeEach(() => { - server.use(buildCloudRegionsReponse(), buildInvoicesResponse()); - }); - - it("renders successfully for all regions", async () => { - const startDate = parseISO("2024-01-01T00:00:00.000+00:00"); - const endDate = parseISO("2024-01-07T00:00:00.000+00:00"); - const payload = generateDailyCostResponsePayload(startDate, endDate); - renderComponent( - , - ); - const planDetails = await screen.findByTestId("spend-breakdown-range"); - expect(planDetails).toHaveTextContent( - "Spend between 01-01-24 and 01-06-24", - ); - const computeTable = screen.getByTestId("spend-breakdown-compute-group"); - expect(computeTable).toHaveTextContent("aws/us-east-1"); - expect(computeTable).toHaveTextContent("aws/eu-west-1"); - const storageTable = screen.getByTestId("spend-breakdown-storage-group"); - expect(storageTable).toHaveTextContent("aws/us-east-1"); - expect(storageTable).toHaveTextContent("aws/eu-west-1"); - }); - - it("hides the details when data is being loaded", async () => { - renderComponent( - , - ); - const planDetails = await screen.findByTestId("spend-breakdown-range"); - expect(planDetails).toHaveTextContent("Spend between"); - const computeTable = screen.getByTestId("spend-breakdown-compute-group"); - expect(computeTable).not.toHaveTextContent("aws/us-east-1"); - expect(computeTable).not.toHaveTextContent("aws/eu-west-1"); - const storageTable = screen.getByTestId("spend-breakdown-storage-group"); - expect(storageTable).not.toHaveTextContent("aws/us-east-1"); - expect(storageTable).not.toHaveTextContent("aws/eu-west-1"); - }); - - it("only displays filtered regions", async () => { - const startDate = parseISO("2024-01-01T00:00:00.000+00:00"); - const endDate = parseISO("2024-01-07T00:00:00.000+00:00"); - const payload = generateDailyCostResponsePayload(startDate, endDate); - renderComponent( - , - ); - const computeTable = screen.getByTestId("spend-breakdown-compute-group"); - expect(computeTable).not.toHaveTextContent("aws/us-east-1"); - expect(computeTable).not.toHaveTextContent("aws/eu-west-1"); - expect(computeTable).toHaveTextContent("credits"); - const storageTable = screen.getByTestId("spend-breakdown-storage-group"); - expect(storageTable).not.toHaveTextContent("aws/us-east-1"); - expect(storageTable).not.toHaveTextContent("aws/eu-west-1"); - }); - - it("correctly aggregates midday plan changes", () => { - const costData: DailyCosts["daily"] = [ - { - startDate: "2024-01-12T00:00:00Z", - endDate: "2024-01-13T12:00:00Z", - subtotal: "1.00", - total: "1.00", - costs: { - compute: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.20", - subtotal: "0.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - { - startDate: "2024-01-13T00:00:00Z", - endDate: "2024-01-13T12:00:00Z", - subtotal: "1.00", - total: "1.00", - costs: { - compute: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.20", - subtotal: "0.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - { - startDate: "2024-01-13T12:00:00Z", - endDate: "2024-01-14T00:00:00Z", - subtotal: "2.00", - total: "2.00", - costs: { - compute: { - subtotal: "1.50", - total: "1.50", - prices: [ - { - regionId: "aws/us-east-1", - replicaSize: "large", - unitAmount: "1.50", - subtotal: "1.50", - }, - ], - }, - storage: { - subtotal: "0.50", - total: "0.50", - prices: [ - { - regionId: "aws/us-east-1", - unitAmount: "0.000081", - subtotal: "0.50", - }, - ], - }, - }, - }, - ]; - const summarized = summarizeResourceCosts(costData, 2); - expect(summarized).toHaveLength(1); - const region = summarized.get("aws/us-east-1"); - expect(region).toBeDefined(); - assert(region); - expect(region.compute.total.usagePoints).toHaveLength(2); - expect(region.compute.total.totalCost).toEqual(2.5); - expect(region.storage.total.usagePoints).toHaveLength(2); - expect(region.storage.total.totalCost).toEqual(1.5); - }); -}); diff --git a/console/src/platform/billing/SpendBreakdown.tsx b/console/src/platform/billing/SpendBreakdown.tsx deleted file mode 100644 index 2824c86698543..0000000000000 --- a/console/src/platform/billing/SpendBreakdown.tsx +++ /dev/null @@ -1,547 +0,0 @@ -// Copyright Materialize, Inc. and contributors. All rights reserved. -// -// Use of this software is governed by the Business Source License -// included in the LICENSE file. -// -// As of the Change Date specified in that file, in accordance with -// the Business Source License, use of this software will be governed -// by the Apache License, Version 2.0. - -import { - Box, - BoxProps, - chakra, - Collapse, - Fade, - Grid, - Text, - Tooltip, - useDisclosure, - useTheme, -} from "@chakra-ui/react"; -import { curveMonotoneX } from "@visx/curve"; -import ParentSize from "@visx/responsive/lib/components/ParentSize"; -import { scaleLinear } from "@visx/scale"; -import { LinePath } from "@visx/shape"; -import { parseISO } from "date-fns"; -import React, { PropsWithChildren, useMemo } from "react"; - -import { DailyCostKey, DailyCosts } from "~/api/cloudGlobalApi"; -import ChevronRightIcon from "~/svg/ChevronRightIcon"; -import WarningIcon from "~/svg/WarningIcon"; -import { MaterializeTheme } from "~/theme"; -import { formatBytes, isSafari } from "~/util"; -import { DATE_FORMAT_SHORT, formatDateInUtc } from "~/utils/dateFormat"; -import { formatCurrency } from "~/utils/format"; - -import { costUnits } from "./constants"; -import { ResourceBreakdown, ResourceMeasurement } from "./types"; -import { summarizeResourceCosts } from "./utils"; - -// The first day of plans that introduced storage usage bucketed by region. -const BUCKETED_STORAGE_START_DATE = new Date("2024-02-01T00:00:00Z"); - -type SpendBreakdownProps = { - region: "all" | string; - dailyCosts: DailyCosts["daily"] | null; - totalDays: number; -}; - -type ResourceGroupProps = { - costCaption?: boolean; - costKey: DailyCostKey; - headerProps?: BoxProps; - isLoading: boolean; - isRegionFiltering: boolean; - label: string; - selectedRegions: Array<[string, ResourceBreakdown]>; - warningMessage?: string; -}; - -function safeRound(value: number, digits: number): number { - const rounded = Math.round(Number(`${value}e+${digits}`)); - return Number(`${rounded}e-${digits}`); -} - -const STROKE_WIDTH = 2; - -const SpendSparkline = ({ - color, - points, - min, - max, - height, - width, -}: { - points: number[]; - min: number; - max: number; - color: string; - height: number; - width: number; -}) => { - const dataPoints = points.map((value, ix) => ({ offset: ix, value })); - const xScale = useMemo( - () => - scaleLinear({ - // Cartesian system values (ascending left to right) - domain: [0, dataPoints.length], - // SVG coordinate values (ascending left to right) - range: [0, width], - }), - [width, dataPoints], - ); - const yScale = useMemo( - () => - scaleLinear({ - // Cartesian system values (ascending left to right) - domain: [min, max], - // SVG coordinate values (ascending top to bottom) - // Add extra padding to avoid clipping broad strokes. - range: [height - STROKE_WIDTH / 2, STROKE_WIDTH / 2], - }), - [height, min, max], - ); - return ( - - xScale(d.offset)} - y={(d) => yScale(d.value)} - /> - - ); -}; - -const StorageMetric = ({ usageGb }: { usageGb: number }) => { - const usageBytes = usageGb * Math.pow(1024, 3); - const [amount, unit] = formatBytes(usageBytes); - const rounded = safeRound(amount, 2); - return ( - - - {rounded} {unit} - - - ); -}; - -const CreditsMetric = ({ credits }: { credits: number }) => { - const rounded = safeRound(credits, 2); - return ( - - {rounded} credits - - ); -}; - -const resourceTypePaddingLeft = 4 + 4 + 2; // table cell + width of caret + caret/label gap - -const baseCellStyles = { - px: 4, - my: "auto", - display: "flex", - alignItems: "center", - height: 8, - borderBottom: "1px solid", -}; - -function getMinWithDefault(left: number, right: number): number { - /// We initialize min values with -1, so it always loses. - if (left === -1) { - return right; - } - if (right === -1) { - return left; - } - return Math.min(left, right); -} - -function findMinMax(points: number[]) { - let min = 1; - let max = 0; - for (const point of points) { - min = getMinWithDefault(min, point); - max = Math.max(max, point); - } - return { min, max }; -} - -type ResourceRowProps = { - costCaption?: boolean; - regionId: string; - resourceType: string; - resourceSummary: ResourceMeasurement; - isLastElement: boolean; - isRegionFiltering: boolean; -}; - -const ResourceRow = ({ - regionId, - resourceType, - resourceSummary, - isLastElement, - isRegionFiltering, - costCaption, -}: ResourceRowProps) => { - const { colors } = useTheme(); - const cellStyles = { - ...baseCellStyles, - borderColor: "transparent", - height: isLastElement ? 10 : baseCellStyles.height, - paddingBottom: isLastElement ? "8px" : "unset", - }; - const { min: usageMin, max: usageMax } = useMemo( - () => findMinMax(resourceSummary.usagePoints), - [resourceSummary], - ); - return ( - <> - - {!isRegionFiltering && `${regionId} / `} - {resourceType} - - - {resourceSummary.usageUnits === costUnits.storage ? ( - - ) : ( - - )} - - - - - {(parent) => ( - - )} - - - - - {formatCurrency(resourceSummary.totalCost)} - {costCaption && ( - - (${resourceSummary.rate} {resourceSummary.usageUnits} - /hr) - - )} - - - ); -}; - -function summarizeRegions(regions: ResourceBreakdown[], costKey: DailyCostKey) { - let totalPoints: number[] = []; - for (const region of regions) { - const { usagePoints: regionPoints } = region[costKey].total; - if (totalPoints.length === 0) { - totalPoints = Array(regionPoints.length).fill(0); - } - totalPoints = regionPoints.map((val, ix) => val + totalPoints[ix]); - } - let min = -1; - let max = 0; - for (const point of totalPoints) { - min = getMinWithDefault(min, point); - max = Math.max(max, point); - } - return { min, max, totalPoints }; -} - -const ResourceGroup = ({ - costCaption, - costKey, - headerProps, - isLoading, - isRegionFiltering, - label, - selectedRegions, - warningMessage, -}: ResourceGroupProps) => { - const { colors } = useTheme(); - const { isOpen, onToggle } = useDisclosure(); - const totalUsageMetric = selectedRegions.reduce( - (total, [_regionId, regionSummary]) => - total + regionSummary[costKey].total.usageValue, - 0, - ); - const selectedSummary = summarizeRegions( - selectedRegions.map(([_regionId, breakdown]) => breakdown), - costKey, - ); - const resourceMeasurements = selectedRegions.flatMap( - ([regionId, regionSummary]) => { - return Array.from(regionSummary[costKey].resources.entries()) - .sort(([_l, left], [_r, right]) => left.sort - right.sort) - .map( - ([resourceType, resourceSummary]) => - [regionId, resourceType, resourceSummary] as const, - ); - }, - ); - const groupHeaderStyles = { - ...baseCellStyles, - height: 16, - textStyle: "heading-xs", - borderColor: !isOpen ? colors.border.secondary : "transparent", - borderBottom: 0, - }; - return ( - <> - - - - {label} - - - - - - - - {selectedRegions.length > 0 && costKey === "storage" ? ( - - ) : ( - - )} - - - - - {(parent) => ( - - )} - - - - - {formatCurrency( - selectedRegions.reduce( - (total, [_regionId, regionSummary]) => - total + regionSummary[costKey].total.totalCost, - 0, - ), - )} - - - - {resourceMeasurements.map( - ([regionId, resourceType, resourceSummary], ix) => ( - - ), - )} - - - ); -}; - -/** - * Safari fails to layout the subgrid elements correctly if they're in a - * Collapse component. For Safari, fall back to showing and hiding a simple - * div. Other browsers get the nice animation. - * - * StackOverflow post where someone encounters a similar issue: - * https://stackoverflow.com/q/77927259/214197 - */ -const SafariSafeCollapse = ({ - children, - isCollapsed, - rowCount, - ...otherProps -}: PropsWithChildren<{ - isCollapsed: boolean; - rowCount: number; -}>) => { - const collapseProps = { - display: "grid", - gridTemplateColumns: "subgrid", - gridColumn: "1 / -1", - maxHeight: rowCount * 32 + 8, - }; - if (isSafari()) { - return ( - - {children} - - ); - } else { - return ( - - {children} - - ); - } -}; - -const SpendBreakdown = ({ - region, - dailyCosts, - totalDays, -}: SpendBreakdownProps) => { - const { colors } = useTheme(); - const isLoading = dailyCosts === null; - const startDate = !isLoading - ? formatDateInUtc(parseISO(dailyCosts[0].startDate), DATE_FORMAT_SHORT) - : "-"; - const endDate = !isLoading - ? formatDateInUtc(parseISO(dailyCosts.at(-1)!.startDate), DATE_FORMAT_SHORT) - : "-"; - const hasUnbucketedStorage = - !isLoading && - parseISO(dailyCosts[0].startDate) < BUCKETED_STORAGE_START_DATE; - const resourceCostsByRegion = useMemo( - () => summarizeResourceCosts(dailyCosts ?? [], totalDays), - [dailyCosts, totalDays], - ); - const isRegionFiltering = region !== "all"; - const regions = !isRegionFiltering - ? Array.from(resourceCostsByRegion.keys()) - : [region]; - const selectedRegions = Array.from(resourceCostsByRegion.entries()).filter( - ([regionId, _regionSummary]) => regions.includes(regionId), - ); - - const tableHeaderStyles = { - ...baseCellStyles, - py: 3, - textStyle: "text-ui-med", - color: colors.foreground.secondary, - borderColor: colors.border.secondary, - height: 10, - }; - - return ( - - - Spend between{" "} - {!isLoading && ( - <> - - {startDate} - {" "} - and{" "} - - {endDate} - - - )} - - - - Resource type - - - Usage - - - Usage trend - - - Total cost - - - - - - ); -}; - -export default SpendBreakdown; diff --git a/console/src/platform/billing/TimeRangeSelect.tsx b/console/src/platform/billing/TimeRangeSelect.tsx index 89eccabd095fb..09d275dd4162a 100644 --- a/console/src/platform/billing/TimeRangeSelect.tsx +++ b/console/src/platform/billing/TimeRangeSelect.tsx @@ -23,7 +23,7 @@ const TimeRangeSelect = ({ timeRange, setTimeRange }: TimeRangeSelectProps) => { 14: "Last 14 days", 30: "Last 30 days", 90: "Last 90 days", - 180: "Last 180 days", + 100: "Last 100 days", }; return ( @@ -42,6 +40,17 @@ const renderComponent = (element: ReactElement) => { return render({element}); }; +// Wrap accounts in a single UTC-day bucket — the minimal `/api/costs/breakdown/ +// daily` payload. Per-day cost is additive, so a one-day window reproduces the +// period totals the breakdown asserts on. +const oneDay = (accounts: CostBreakdownAccount[]) => [ + { + startDate: "2024-01-15T00:00:00Z", + endDate: "2024-01-16T00:00:00Z", + accounts, + }, +]; + const buildOrganization = (overrides: Partial = {}) => { return { id: "00000000-0000-0000-0000-000000000000", @@ -63,6 +72,7 @@ describe("UsagePage", () => { buildCloudRegionsReponse(), buildInvoicesResponse(), buildCreditsResponse(), + buildDailyCostBreakdownResponse(), buildCloudOrganizationsResponse({ payload: buildOrganization(), }), @@ -74,104 +84,486 @@ describe("UsagePage", () => { vi.clearAllMocks(); }); - it("renders successfully for all regions", async () => { - const [startDate, endDate] = getTimeRange(7); - const payload = generateDailyCostResponsePayload(startDate, endDate); - expect(payload.daily.length).toEqual(30); - server.use(buildDailyCostResponse({ payload })); + it("renders a unified account & cluster ledger for a parent org", async () => { + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "parent-org", + name: "", + clusters: [ + { + environment_id: "environment-parent-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "10.00" }, + usage: 0, + }, + { + environment_id: "environment-parent-0", + cluster_grouping_key: "compute.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "4.00" }, + usage: 0, + }, + ], + }, + { + external_customer_id: "child-org", + name: "", + clusters: [ + { + environment_id: "environment-child-0", + cluster_grouping_key: "prod.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "5.00" }, + usage: 0, + }, + ], + }, + ]), + }, + }), + ); renderComponent(); - const regionSelect = await screen.findByTestId( - "region-select", - {}, - { timeout: 5_000 }, + const breakdown = within( + await screen.findByTestId( + "account-spend-breakdown", + {}, + { timeout: 5_000 }, + ), + ); + // The ledger lives in its own full-width grid row below the chart and + // plan-details columns (SAS-154). + const ledger = within(await screen.findByTestId("account-spend-ledger")); + // One expandable row per account, biggest spender first, each showing that + // account's period total (parent 14 = 10 + 4, child 5). + const accountRows = await ledger.findAllByTestId("account-row"); + expect(accountRows).toHaveLength(2); + expect(within(accountRows[0]).getByText(formatCurrency(14))).toBeVisible(); + expect(within(accountRows[1]).getByText(formatCurrency(5))).toBeVisible(); + // Each account row also shows its share of the period total (SAS-144): + // parent 14/19 ≈ 73.7%, child 5/19 ≈ 26.3%. + expect(within(accountRows[0]).getByText("73.7%")).toBeVisible(); + expect(within(accountRows[1]).getByText("26.3%")).toBeVisible(); + // Accounts render expanded, so every cluster row is visible inline, + // region-qualified ("aws/us-east-1 / "). + for (const cluster of ["quickstart.r1", "compute.r1", "prod.r1"]) { + expect( + await ledger.findByText(`aws/us-east-1 / ${cluster}`), + ).toBeVisible(); + } + // The segmented-by-account chart and the grand-total row (19 = 14 + 5) are + // present. + expect(await breakdown.findByTestId("account-spend-chart")).toBeVisible(); + const totalRow = within(await ledger.findByTestId("account-total-row")); + expect(totalRow.getByText(formatCurrency(19))).toBeVisible(); + // A Usage column sits between "Account / cluster" and "Share of total" + // (SAS-145): the endpoint doesn't carry usage quantities yet, so each of + // the 3 cluster rows shows a placeholder rather than a number. + expect(await ledger.findByText("Usage")).toBeVisible(); + expect(ledger.getAllByText("—")).toHaveLength(3); + // The section leads with the period total (19 = 14 + 5), mirroring the + // legacy chart panel, and a "Spend between …" range above the table, + // mirroring the legacy "Spend between …" breakdown. oneDay()'s single + // bucket is 2024-01-15, so the range collapses to that one date. + expect( + within(await breakdown.findByTestId("account-spend-total")).getByText( + formatCurrency(19), + ), + ).toBeVisible(); + const range = within(await ledger.findByTestId("account-spend-range")); + expect(range.getByText("Spend between", { exact: false })).toBeVisible(); + expect(range.getAllByText("01-15-24")).toHaveLength(2); + }); + + it("sends bare inclusive UTC calendar dates to the breakdown endpoint (SAS-151)", async () => { + // Regression guard for the timestamp-serialization bug class: the query + // params must be plain YYYY-MM-DD (no time component, no local-zone + // offset for a shifted wall-clock date to hide in), computed from UTC + // calendar fields, both ends inclusive. + const captured: URLSearchParams[] = []; + server.use( + http.get("*/api/costs/breakdown/daily", ({ request }) => { + captured.push(new URL(request.url).searchParams); + return HttpResponse.json({ days: [] }); + }), ); - expect(regionSelect).toBeVisible(); + // Computed before render so a UTC-midnight rollover mid-test can't skew + // the expectation. + const now = new Date(); + const utcDay = (offset: number) => + new Date( + Date.UTC( + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + offset, + ), + ) + .toISOString() + .slice(0, 10); - const timeRangeSelect = await screen.findByTestId("time-range-select"); - expect(timeRangeSelect).toBeVisible(); + renderComponent(); + // The page fires two breakdown queries: the selected range (default + // "Last 7 days") and the fixed 30-day plan-details window. + await waitFor(() => expect(captured.length).toBeGreaterThanOrEqual(2)); - const spend = await screen.findByTestId("all-spend-amount"); - const timeRangeSubtotal = payload.daily - .slice(-7) - .reduce((subtotal, day) => subtotal + parseFloat(day.subtotal), 0); - expect(spend.textContent).toEqual(formatCurrency(timeRangeSubtotal)); + for (const params of captured) { + expect(params.get("startDate")).toMatch(/^\d{4}-\d{2}-\d{2}$/); + expect(params.get("endDate")).toMatch(/^\d{4}-\d{2}-\d{2}$/); + } + // "Last N days" is the N inclusive UTC days ending today, so exactly N + // buckets can come back — the 31-buckets-for-30-days symptom is pinned + // out here. + const sevenDay = captured.find((p) => p.get("startDate") === utcDay(-6)); + expect(sevenDay?.get("endDate")).toBe(utcDay(0)); + const thirtyDay = captured.find((p) => p.get("startDate") === utcDay(-29)); + expect(thirtyDay?.get("endDate")).toBe(utcDay(0)); + }); - await waitFor(async () => - expect(await screen.findByTestId("chart")).toBeVisible(), + it("shows an error state when the breakdown request fails", async () => { + server.use(buildDailyCostBreakdownResponse({ status: 500 })); + renderComponent(); + expect( + await screen.findByText("An error occurred loading your usage"), + ).toBeVisible(); + }); + + it("shows an empty state when the window has no usage", async () => { + // beforeEach's default handler already returns { days: [] }. + renderComponent(); + expect(await screen.findByTestId("account-breakdown-empty")).toBeVisible(); + }); + + it("renders 0.0% shares for an all-zero period instead of NaN (SAS-144)", async () => { + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "parent-org", + name: "", + clusters: [ + { + environment_id: "environment-parent-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "0.00" }, + usage: 0, + }, + ], + }, + { + external_customer_id: "child-org", + name: "", + clusters: [ + { + environment_id: "environment-child-0", + cluster_grouping_key: "prod.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "0.00" }, + usage: 0, + }, + ], + }, + ]), + }, + }), ); + renderComponent(); + + const ledger = within( + await screen.findByTestId("account-spend-ledger", {}, { timeout: 5_000 }), + ); + const accountRows = await ledger.findAllByTestId("account-row"); + expect(accountRows).toHaveLength(2); + for (const row of accountRows) { + expect(within(row).getByText("0.0%")).toBeVisible(); + } + expect(ledger.queryByText(/NaN/)).not.toBeInTheDocument(); }); - it("changing the region filters the totals", async () => { - const [startDate, endDate] = getTimeRange(7); - const payload = generateDailyCostResponsePayload(startDate, endDate); - server.use(buildDailyCostResponse({ payload })); + it("shows a plan-details box beside the breakdown, itemizing last 30 days by account", async () => { + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "parent-org", + name: "", + clusters: [ + { + environment_id: "environment-parent-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "10.00" }, + usage: 0, + }, + { + environment_id: "environment-parent-0", + cluster_grouping_key: "compute.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "4.00" }, + usage: 0, + }, + ], + }, + { + external_customer_id: "child-org", + name: "", + clusters: [ + { + environment_id: "environment-child-0", + cluster_grouping_key: "prod.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "5.00" }, + usage: 0, + }, + ], + }, + ]), + }, + }), + ); renderComponent(); - const regionSelect = screen.getByTestId("region-select"); - expect(regionSelect).toBeVisible(); - await waitFor(async () => - expect(await screen.findByTestId("chart")).toBeVisible(), + const planDetails = within( + await screen.findByTestId("account-plan-details", {}, { timeout: 5_000 }), + ); + // The box renders before the breakdown resolves, so await the spend rows. + // Every figure is derived from /api/costs/breakdown/daily, not + // /api/costs/daily. + expect(await planDetails.findByText("Total spend")).toBeVisible(); + expect(await planDetails.findByText("Last 30 days")).toBeVisible(); + expect(await planDetails.findByText("Daily average")).toBeVisible(); + // "Last 30 days" is itemized by account (parent 14 = 10 + 4, child 5), + // biggest spender first, under the window total. + expect(await planDetails.findByText(formatCurrency(14))).toBeVisible(); + expect(await planDetails.findByText(formatCurrency(5))).toBeVisible(); + }); + + it("renders storage and egress as distinct region-qualified rows", async () => { + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "standalone-org", + name: "", + clusters: [ + { + environment_id: "environment-standalone-0", + cluster_grouping_key: "default.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "3.00" }, + usage: 0, + }, + { + // Storage and egress both have an empty cluster_grouping_key; + // their `category` keeps them on separate rows, rendered as + // " / Storage" and " / Egress". + environment_id: "environment-standalone-0", + cluster_grouping_key: "", + category: "Storage", + region: "aws/us-east-1", + amounts: { "price-storage": "0.50" }, + usage: 0, + }, + { + environment_id: "environment-standalone-0", + cluster_grouping_key: "", + category: "Egress", + region: "aws/us-east-1", + amounts: { "price-egress": "0.25" }, + usage: 0, + }, + ], + }, + ]), + }, + }), ); - const spendElement = await screen.findByTestId("all-spend-amount"); - const allSpend = parseFloat( - spendElement.textContent!.replace("$", "").replace(",", ""), + renderComponent(); + + const ledger = within( + await screen.findByTestId("account-spend-ledger", {}, { timeout: 5_000 }), ); - await selectReactSelectOption(regionSelect, "aws/us-east-1"); - const regionElement = await screen.findByTestId( - "aws/us-east-1-spend-amount", + // The account renders expanded, so its clusters are visible inline. Scope + // lookups to the ledger table. Storage and egress (both empty + // cluster_grouping_key) stay on separate rows via `category`. + expect(await ledger.findByText("aws/us-east-1 / default.r1")).toBeVisible(); + expect(await ledger.findByText("aws/us-east-1 / Storage")).toBeVisible(); + expect(await ledger.findByText("aws/us-east-1 / Egress")).toBeVisible(); + }); + + it("falls back to 'Other' when a row has neither cluster key nor category", async () => { + // Defensive: a non-compute row with an empty cluster_grouping_key and no + // category can only occur against a backend that predates the `category` + // field. It should render " / Other" rather than mislabel as a + // cluster or crash. + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "standalone-org", + name: "", + clusters: [ + { + environment_id: "environment-standalone-0", + cluster_grouping_key: "", + category: "", + region: "aws/us-east-1", + amounts: { "price-storage": "0.50" }, + usage: 0, + }, + ], + }, + ]), + }, + }), ); - const regionSpend = parseFloat( - regionElement.textContent!.replace("$", "").replace(",", ""), + renderComponent(); + + const ledger = within( + await screen.findByTestId("account-spend-ledger", {}, { timeout: 5_000 }), ); - expect(regionSpend, JSON.stringify(payload)).toBeLessThan(allSpend); + // The account renders expanded, so its one cluster row is visible inline. + expect(await ledger.findByText("aws/us-east-1 / Other")).toBeVisible(); }); - it("changing the time range filters the totals", async () => { - let [startDate, endDate] = getTimeRange(7); - let payload = generateDailyCostResponsePayload(startDate, endDate); - server.use(buildDailyCostResponse({ payload })); + it("filters the ledger by region", async () => { + server.use( + buildDailyCostBreakdownResponse({ + payload: { + days: oneDay([ + { + external_customer_id: "east-org", + name: "", + clusters: [ + { + environment_id: "environment-east-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "10.00" }, + usage: 0, + }, + ], + }, + { + external_customer_id: "west-org", + name: "", + clusters: [ + { + environment_id: "environment-west-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/eu-west-1", + amounts: { "price-compute": "5.00" }, + usage: 0, + }, + ], + }, + ]), + }, + }), + ); renderComponent(); - const timeRangeSelect = - screen.getByTestId("time-range-select"); - expect(timeRangeSelect).toBeVisible(); - await waitFor(async () => - expect(await screen.findByTestId("chart")).toBeVisible(), + const ledger = within( + await screen.findByTestId("account-spend-ledger", {}, { timeout: 5_000 }), ); + // Both accounts show before filtering. + expect(await ledger.findAllByTestId("account-row")).toHaveLength(2); + const totalRowBefore = within( + await ledger.findByTestId("account-total-row"), + ); + expect(totalRowBefore.getByText(formatCurrency(15))).toBeVisible(); - const spendElement = await screen.findByTestId("all-spend-amount"); - const originalSpend = parseFloat( - spendElement.textContent!.replace("$", "").replace(",", ""), + const planDetails = within( + await screen.findByTestId("account-plan-details", {}, { timeout: 5_000 }), ); + const totalSpendLabel = await planDetails.findByText("Total spend"); + // The plan-details summary must track the same region filter as the + // ledger, so it starts at the unfiltered $15 total too. + expect( + within(totalSpendLabel.parentElement as HTMLElement).getByText( + formatCurrency(15), + ), + ).toBeVisible(); - [startDate, endDate] = getTimeRange(14); - payload = generateDailyCostResponsePayload(startDate, endDate); - server.use(buildDailyCostResponse({ payload })); - await selectReactSelectOption(timeRangeSelect, "Last 14 days"); - await waitFor(async () => - expect(await screen.findByTestId("chart")).toBeVisible(), + const regionSelect = screen.getByTestId( + "account-region-select", ); - const newSpend = parseFloat( - spendElement.textContent!.replace("$", "").replace(",", ""), + await selectReactSelectOption(regionSelect, "aws/us-east-1"); + + // Only the us-east-1 account remains, and the grand total drops to just + // its cost — the eu-west-1 account is filtered out entirely. + await waitFor(async () => { + expect(await ledger.findAllByTestId("account-row")).toHaveLength(1); + }); + const accountRows = await ledger.findAllByTestId("account-row"); + expect(within(accountRows[0]).getByText(formatCurrency(10))).toBeVisible(); + const totalRowAfter = within( + await ledger.findByTestId("account-total-row"), ); - expect(originalSpend).toBeLessThan(newSpend); + expect(totalRowAfter.getByText(formatCurrency(10))).toBeVisible(); + + // The plan-details summary follows the same filter: total spend drops to + // the us-east-1-only figure, matching the ledger. + await waitFor(() => { + expect( + within(totalSpendLabel.parentElement as HTMLElement).getByText( + formatCurrency(10), + ), + ).toBeVisible(); + }); }); - it("displays a generic error if there's an issue querying the server", async () => { - server.use(buildDailyCostResponse({ status: 500 })); + it("displays the invoices table for direct-billed organizations", async () => { + server.use( + buildInvoicesResponse({ + invoices: [ + { + issueDate: "2026-06-02T00:00:00Z", + currency: "usd", + total: "100.00", + amountDue: "100.00", + createdAt: "2026-06-02T00:00:00Z", + status: "paid", + invoiceNumber: "INV-001", + }, + ], + }), + ); renderComponent(); await waitFor(async () => - expect(await screen.findByTestId("chart-error")).toBeVisible(), + expect(await screen.findByTestId("invoice-table")).toBeVisible(), ); }); - it("displays the invoices table for direct-billed organizations", async () => { - server.use(buildDailyCostResponse()); + it("hides the invoice history section entirely for an account with no invoices (e.g. an Orb hierarchy leaf account, which never has its own)", async () => { + server.use(buildInvoicesResponse({ invoices: [] })); renderComponent(); await waitFor(async () => - expect(await screen.findByTestId("invoice-table")).toBeVisible(), + expect( + await screen.findByTestId("account-spend-breakdown"), + ).toBeVisible(), ); + expect(screen.queryByText("Invoice history")).not.toBeInTheDocument(); + expect(screen.queryByTestId("invoice-table")).not.toBeInTheDocument(); }); it("hides the invoices table for AWS Marketplace-billed organizations", async () => { @@ -184,7 +576,6 @@ describe("UsagePage", () => { }, }), }), - buildDailyCostResponse(), ); renderComponent(); @@ -193,59 +584,8 @@ describe("UsagePage", () => { ); }); - it("correctly slices the right number of records for the time range when the range is equal to the number of days", () => { - const dailyCosts: DailyCosts["daily"] = [ - { - startDate: "2024-01-13T00:00:00Z", - endDate: "2024-01-14T00:00:00Z", - costs: { - compute: { prices: [], subtotal: "0.00", total: "0.00" }, - storage: { prices: [], subtotal: "0.00", total: "0.00" }, - }, - total: "0.00", - subtotal: "0.00", - }, - { - startDate: "2024-01-14T00:00:00Z", - endDate: "2024-01-14T12:00:00Z", - costs: { - compute: { prices: [], subtotal: "0.00", total: "0.00" }, - storage: { prices: [], subtotal: "0.00", total: "0.00" }, - }, - total: "0.00", - subtotal: "0.00", - }, - { - startDate: "2024-01-14T12:00:00Z", - endDate: "2024-01-15T00:00:00Z", - costs: { - compute: { prices: [], subtotal: "0.00", total: "0.00" }, - storage: { prices: [], subtotal: "0.00", total: "0.00" }, - }, - total: "0.00", - subtotal: "0.00", - }, - { - startDate: "2024-01-15T00:00:00Z", - endDate: "2024-01-16T00:00:00Z", - costs: { - compute: { prices: [], subtotal: "0.00", total: "0.00" }, - storage: { prices: [], subtotal: "0.00", total: "0.00" }, - }, - total: "0.00", - subtotal: "0.00", - }, - ]; - // Get 3 days of the time range - const sliced = getTimeRangeSlice(dailyCosts, 3); - assert(sliced !== null); - expect(sliced).toHaveLength(4); - expect(sliced[0].startDate).toEqual(dailyCosts[0].startDate); - expect(sliced[3].startDate).toEqual(dailyCosts[3].startDate); - }); - it("generates appropriate time components for a time range", () => { - const [start, end] = getTimeRange(7); + const [start, end] = getDayAlignedRange(7); expect(start.getUTCHours()).toEqual(0); expect(start.getUTCHours()).toEqual(0); expect(start.getUTCMinutes()).toEqual(0); diff --git a/console/src/platform/billing/UsagePage.tsx b/console/src/platform/billing/UsagePage.tsx index 3fee621d538b7..7f213a86d93b6 100644 --- a/console/src/platform/billing/UsagePage.tsx +++ b/console/src/platform/billing/UsagePage.tsx @@ -19,34 +19,41 @@ import { Text, useTheme, } from "@chakra-ui/react"; -import React, { useMemo, useRef, useState } from "react"; +import React, { useRef, useState } from "react"; import { useCurrentOrganization } from "~/api/auth"; -import { DailyCosts, PlanType } from "~/api/cloudGlobalApi"; +import { PlanType } from "~/api/cloudGlobalApi"; import ErrorBox from "~/components/ErrorBox"; import { MainContentContainer } from "~/layouts/BaseLayout"; import { MaterializeTheme } from "~/theme"; import { nowUTC } from "~/util"; -import { formatCurrency } from "~/utils/format"; -import DailyUsageChart, { - chartHeightPx, - legendHeightPx, -} from "./DailyUsageChart"; +import AccountSpendBreakdown, { + AccountSpendLedger, +} from "./AccountSpendBreakdown"; import InvoiceTable from "./InvoiceTable"; -import { UpgradedPlanDetails } from "./PlanDetails"; -import { useDailyCosts, useRecentInvoices } from "./queries"; -import RegionSelect from "./RegionSelect"; -import SpendBreakdown from "./SpendBreakdown"; -import TimeRangeSelect from "./TimeRangeSelect"; -import { getTimeRangeSlice } from "./utils"; +import { AccountSpendPlanDetails } from "./PlanDetails"; +import { useDailyCostsBreakdown, useRecentInvoices } from "./queries"; const DEFAULT_TIME_RANGE_LOOKBACK_DAYS = 7; +// Fixed window behind the account plan-details box's "Last 30 days" row, +// independent of the time-range selector. +const LAST_30_DAYS_LOOKBACK = 30; -const InvoiceTableWrapper = ({ planType }: { planType: PlanType }) => { +// A leaf account's own invoice list is permanently empty (Orb invoices belong +// only to the billing owner, never split per child), so an empty result here +// means there's nothing to show, ever, not just "still loading." Hide the +// heading along with the table rather than leave a header with no rows. +const InvoiceHistorySection = ({ planType }: { planType: PlanType }) => { const { data: invoices, isLoading, isError, error } = useRecentInvoices(); + if (!isLoading && !isError && (invoices?.length ?? 0) === 0) { + return null; + } return ( <> + + Invoice history + {isLoading ? ( ) : isError ? ( @@ -94,188 +101,80 @@ const AwsMarketplaceInvoiceBanner = () => { ); }; -type ChartPanelProps = { - timeRange: number; - setTimeRange: (val: number) => void; - dailyCosts: DailyCosts["daily"] | null; - isLoading: boolean; - isError: boolean; - regionFilter: "all" | string; - setRegionFilter: (val: ChartPanelProps["regionFilter"]) => void; - error: Error | null; -}; - -function getTotalSpend( - dailyCosts: DailyCosts["daily"] | null, - region: "all" | string, -): number { - if (dailyCosts === null) { - return 0; - } - let totalPrice = 0; - for (const day of dailyCosts) { - for (const costKey of ["compute", "storage"] as const) { - for (const price of day.costs[costKey].prices) { - if (region === "all" || price.regionId === region) { - totalPrice += parseFloat(price.subtotal); - } - } - } - } - return totalPrice; -} - -const SelectorPanel = ({ - timeRange, - setTimeRange, - regionFilter, - setRegionFilter, -}: { - timeRange: number; - setTimeRange: (val: number) => void; - regionFilter: "all" | string; - setRegionFilter: (val: ChartPanelProps["regionFilter"]) => void; -}) => { - return ( - -
- -
-
- -
-
- ); -}; - -const ChartPanel = ({ - dailyCosts, - regionFilter, - isLoading, - isError, - error, -}: ChartPanelProps) => { - const totalSpend = useMemo( - () => getTotalSpend(dailyCosts, regionFilter), - [dailyCosts, regionFilter], - ); - - return ( - - - - {formatCurrency(totalSpend)} - - - - {isLoading && ( - - )} - {isError && ( - - )} - {!isLoading && !isError && dailyCosts && ( - - )} - - - ); -}; - const UsagePage = () => { const { organization } = useCurrentOrganization(); const [regionFilter, setRegionFilter] = useState<"all" | string>("all"); - const [lastQueryTime, setLastQueryTime] = useState(nowUTC()); + const [lastQueryTime] = useState(nowUTC()); const [timeRangeFilter, setTimeRangeFilter] = useState( DEFAULT_TIME_RANGE_LOOKBACK_DAYS, ); const { - data: dailyCosts, - isLoading: isDailyCostsLoading, - isError: isDailyCostsError, - error: dailyCostsError, - } = useDailyCosts(timeRangeFilter, lastQueryTime); + data: costBreakdownDays, + isLoading: isCostBreakdownLoading, + isError: isCostBreakdownError, + error: costBreakdownError, + } = useDailyCostsBreakdown(timeRangeFilter, lastQueryTime); + // A separate fixed 30-day breakdown feeds the plan-details "Last 30 days" row. + // When the selected range is also 30 days this shares the query cache. + const { data: last30BreakdownDays } = useDailyCostsBreakdown( + LAST_30_DAYS_LOOKBACK, + lastQueryTime, + ); const chartTooltipRef = useRef(null); - const timeRangeCosts = useMemo( - () => getTimeRangeSlice(dailyCosts?.daily ?? null, timeRangeFilter), - [dailyCosts, timeRangeFilter], - ); return ( <> - - - - - + { - setTimeRangeFilter(range); - setLastQueryTime(nowUTC()); - }} - dailyCosts={timeRangeCosts} - isLoading={isDailyCostsLoading} - isError={isDailyCostsError} - error={dailyCostsError} + setTimeRange={setTimeRangeFilter} /> - - + - - + - - Invoice history - {organization?.subscription?.marketplace === "aws" ? ( - + <> + + Invoice history + + + ) : ( - )} diff --git a/console/src/platform/billing/UsageRoutes.test.tsx b/console/src/platform/billing/UsageRoutes.test.tsx new file mode 100644 index 0000000000000..255b1f73896fb --- /dev/null +++ b/console/src/platform/billing/UsageRoutes.test.tsx @@ -0,0 +1,171 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { render, screen, waitFor } from "@testing-library/react"; +import React from "react"; +import { Route, Routes } from "react-router-dom"; + +import { Organization } from "~/api/cloudGlobalApi"; +import { + buildCloudOrganizationsResponse, + buildInvoicesResponse, +} from "~/api/mocks/cloudGlobalApiHandlers"; +import server from "~/api/mocks/server"; +import { CloudRuntimeConfig } from "~/config/AppConfigSwitch"; +import { dummyValidUser } from "~/external-library-wrappers/__mocks__/frontegg"; +import type { + ITeamUserPermission, + User, +} from "~/external-library-wrappers/frontegg"; +import { + createProviderWrapper, + healthyEnvironment, + setFakeEnvironment, +} from "~/test/utils"; + +import UsageRoutes from "./UsageRoutes"; + +// `useCanViewBilling` requires this flag; its real value lives in +// LaunchDarkly, so mock it to isolate the invoices-based gate under test. +vi.mock("~/hooks/useFlags", () => ({ + useFlags: () => ({ "billing-ui-3756": true }), +})); + +// This test only exercises the tab strip / route gating in UsageRoutes +// itself, not the pages' own data fetching, so stub them out rather than +// mocking every endpoint UsagePage and BillingPage otherwise need. +vi.mock("./UsagePage", () => ({ + default: () =>
Usage Page
, +})); +vi.mock("./BillingPage", () => ({ + default: () =>
Billing Page
, +})); + +const adminUser: User = { + ...dummyValidUser, + permissions: [ + { key: "materialize.environment.write" } as ITeamUserPermission, + { key: "materialize.environment.read" } as ITeamUserPermission, + { key: "materialize.invoice.read" } as ITeamUserPermission, + ], +}; + +// `auth`/`authActions` aren't exercised by this test (UsageRoutes only reads +// `isImpersonating` and `user`); the shapes below just satisfy the type. +const runtimeConfig = { + isImpersonating: false as const, + user: adminUser, + auth: { tenantsState: { tenants: [] } }, + authActions: { switchTenant: vi.fn() }, +} as unknown as CloudRuntimeConfig; + +const stripePromise = Promise.resolve(null); + +const buildOrganization = ( + overrides: Partial = {}, +): Organization => ({ + id: "org_id", + name: "Test Organization", + blocked: false, + onboarded: true, + trialExpiresAt: null, + subscription: { type: "on-demand", marketplace: "direct" }, + ...overrides, +}); + +const oneInvoice = [ + { + issueDate: "2026-06-02T00:00:00Z", + currency: "usd", + total: "100.00", + amountDue: "100.00", + createdAt: "2026-06-02T00:00:00Z", + status: "paid", + invoiceNumber: "INV-001", + }, +]; + +const renderAt = async (path: string) => { + const Wrapper = await createProviderWrapper({ + initializeState: ({ set }) => + setFakeEnvironment(set, "aws/us-east-1", healthyEnvironment), + router: { type: "MEMORY_ROUTER", initialRouterEntries: [path] }, + }); + // Mirrors how AuthenticatedRoutes.tsx mounts UsageRoutes (nested under a + // "usage" prefix) so the leading-slash paths inside UsageRoutes ("/overview", + // "/billing") match against the right remainder of the URL. + return render( + + + + } + /> + + , + ); +}; + +describe("UsageRoutes", () => { + afterEach(() => { + server.resetHandlers(); + }); + + it("shows Billing for a paying org with invoices", async () => { + server.use( + buildCloudOrganizationsResponse({ payload: buildOrganization() }), + buildInvoicesResponse({ invoices: oneInvoice }), + ); + await renderAt("/usage/overview"); + + await waitFor(() => { + expect(screen.getByRole("link", { name: "Billing" })).toBeVisible(); + }); + }); + + it("shows Billing for an evaluation org even with no invoices yet", async () => { + server.use( + buildCloudOrganizationsResponse({ + payload: buildOrganization({ + subscription: { type: "evaluation", marketplace: "direct" }, + }), + }), + buildInvoicesResponse({ invoices: [] }), + ); + // Evaluation orgs have no Overview route (see isUpgradedPlan gating). + await renderAt("/usage/billing"); + + await waitFor(() => { + expect(screen.getByRole("link", { name: "Billing" })).toBeVisible(); + }); + }); + + it("hides Billing for a non-evaluation org with no invoices (e.g. a leaf account)", async () => { + server.use( + buildCloudOrganizationsResponse({ payload: buildOrganization() }), + buildInvoicesResponse({ invoices: [] }), + ); + await renderAt("/usage/overview"); + + // Billing reads as hidden from the very first render (invoices loading + // counts as "no invoices"), and stays hidden once the empty result loads. + expect(screen.queryByRole("link", { name: "Billing" })).toBeNull(); + await waitFor(() => { + expect( + screen.queryByRole("link", { name: "Billing" }), + ).not.toBeInTheDocument(); + }); + expect(screen.getByRole("link", { name: "Overview" })).toBeVisible(); + }); +}); diff --git a/console/src/platform/billing/UsageRoutes.tsx b/console/src/platform/billing/UsageRoutes.tsx index 32b0514575deb..7024df82f2894 100644 --- a/console/src/platform/billing/UsageRoutes.tsx +++ b/console/src/platform/billing/UsageRoutes.tsx @@ -7,7 +7,7 @@ // the Business Source License, use of this software will be governed // by the Apache License, Version 2.0. -import { HStack, Text, useTheme, VStack } from "@chakra-ui/react"; +import { Box, HStack, Text, useTheme, VStack } from "@chakra-ui/react"; import { Stripe } from "@stripe/stripe-js"; import React from "react"; import { Navigate, Outlet, Route } from "react-router-dom"; @@ -20,9 +20,17 @@ import { SentryRoutes } from "~/sentry"; import { MaterializeTheme } from "~/theme"; import BillingPage from "./BillingPage"; +import PricingPage from "./PricingPage"; +import { useRecentInvoices } from "./queries"; import UsagePage from "./UsagePage"; import { getIsUpgradedPlan } from "./utils"; +// Static reference material, not account-specific data, so it lives to the +// right of the account tabs rather than behind the (root-only) Billing tab. +const PRICING_TAB: Tab[] = [ + { label: "Pricing", href: "/usage/pricing", end: true }, +]; + const UsageLayout = ({ isBillingVisible }: { isBillingVisible: boolean }) => { const { colors } = useTheme(); const { organization } = useCurrentOrganization(); @@ -56,7 +64,30 @@ const UsageLayout = ({ isBillingVisible }: { isBillingVisible: boolean }) => { Contact support - + {/* Each PageTabStrip draws its underline only across its own width, + which would leave gaps in the strips' spacing and the row's + right padding. The same 1px inset line on the row itself keeps + it continuous. Bottom-align the strips (the active tab's 1px + borderBottom makes its strip 1px taller; centering would float + the other strip's underline off the row's) so all the underline + segments land on the same pixel row. */} + + + + + {/* A separate single-tab strip so Pricing shares the tab strip's + hover pill and active underline instead of hand-rolled hover + styling. */} + + + + @@ -74,7 +105,22 @@ const UsageRoutes = ({ const { organization } = useCurrentOrganization(); const isUpgradedPlan = getIsUpgradedPlan(organization?.subscription?.type); - const isBillingVisible = useCanViewBilling({ runtimeConfig }); + const { data: invoices } = useRecentInvoices(); + // Proxy for "is this a leaf account": a leaf's invoices always read as + // empty (SAS-148), same signal InvoiceHistorySection uses. Evaluation orgs + // are also invoice-less pre-upgrade, so carve those out to keep Billing + // reachable for a first-time "Upgrade & Pay". Known gap and the direct fix + // (an is_billing_child field, already written but undeployed): SAS-150. + // NOTE: this reads as "hide" while the query is loading, briefly hiding + // Billing/the route for a real billing owner on first load. Don't "fix" + // that by failing open on loading/error: the route below is gated on this + // same flag, and failing open can flip true->false for a leaf account + // already on /usage/billing, unmounting the route with no fallback and no + // way back. This direction (hidden -> visible, self-correcting) is safer. + const isBillingVisible = + useCanViewBilling({ runtimeConfig }) && + (organization?.subscription?.type === "evaluation" || + (invoices?.length ?? 0) > 0); const shouldRedirectToBilling = isBillingVisible && !isUpgradedPlan; @@ -93,6 +139,9 @@ const UsageRoutes = ({ } /> )} + {/* Static reference material, not account-specific, so it's reachable + regardless of plan type or billing-child status. */} + } /> = {}, +) { + return { + environment_id: "environment-acct-0", + cluster_grouping_key: "quickstart.r1", + category: "", + region: "aws/us-east-1", + amounts: { "price-compute": "10.00" }, + usage: 0, + ...overrides, + }; +} + +describe("aggregateDays", () => { + it("sums a cluster's amounts across days into the period total", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "acct", + name: "", + clusters: [cluster({ amounts: { "price-compute": "10.00" } })], + }, + ], + }, + { + startDate: "2026-06-02T00:00:00Z", + endDate: "2026-06-03T00:00:00Z", + accounts: [ + { + external_customer_id: "acct", + name: "", + clusters: [cluster({ amounts: { "price-compute": "4.50" } })], + }, + ], + }, + ]; + + const { accounts } = aggregateDays(days); + expect(accounts).toHaveLength(1); + expect(accounts[0].clusters).toHaveLength(1); + expect(accounts[0].clusters[0].amounts["price-compute"]).toBe("14.5"); + expect(accountTotal(accounts[0])).toBeCloseTo(14.5); + }); + + it("keeps storage and egress (same empty cluster key) as distinct rows by category", () => { + const clusters = [ + cluster({ + cluster_grouping_key: "", + category: "Storage", + amounts: { "price-storage": "0.50" }, + }), + cluster({ + cluster_grouping_key: "", + category: "Egress", + amounts: { "price-egress": "0.25" }, + }), + ]; + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [{ external_customer_id: "acct", name: "", clusters }], + }, + ]; + + const { accounts } = aggregateDays(days); + const categories = accounts[0].clusters.map((c) => c.category).sort(); + expect(categories).toEqual(["Egress", "Storage"]); + }); +}); + +describe("accountDailyTotals", () => { + it("returns a zero-filled per-day series for every account", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "a", + name: "", + clusters: [cluster({ amounts: { c: "3.00" } })], + }, + ], + }, + { + // "b" first appears on day 2; "a" has no usage this day. + startDate: "2026-06-02T00:00:00Z", + endDate: "2026-06-03T00:00:00Z", + accounts: [ + { + external_customer_id: "b", + name: "", + clusters: [cluster({ amounts: { c: "7.00" } })], + }, + ], + }, + ]; + + const series = accountDailyTotals(days); + expect(series.get("a")).toEqual([3, 0]); + expect(series.get("b")).toEqual([0, 7]); + }); + + it("sums rather than overwrites if a day repeats the same account id", () => { + // The backend keys each day's accounts by id before returning them, so + // this shouldn't happen in practice, but the series must not silently + // undercount (and disagree with aggregateDays's total) if it ever does. + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "a", + name: "", + clusters: [cluster({ amounts: { c: "3.00" } })], + }, + { + external_customer_id: "a", + name: "", + clusters: [cluster({ amounts: { c: "4.00" } })], + }, + ], + }, + ]; + + const series = accountDailyTotals(days); + expect(series.get("a")).toEqual([7]); + }); +}); + +describe("accountIdsByTotal / stackedDailyRows", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "small", + name: "", + clusters: [cluster({ amounts: { c: "1.00" } })], + }, + { + external_customer_id: "big", + name: "", + clusters: [cluster({ amounts: { c: "5.00" } })], + }, + ], + }, + { + startDate: "2026-06-02T00:00:00Z", + endDate: "2026-06-03T00:00:00Z", + accounts: [ + { + external_customer_id: "big", + name: "", + clusters: [cluster({ amounts: { c: "5.00" } })], + }, + ], + }, + ]; + + it("orders account ids by descending period total", () => { + expect(accountIdsByTotal(accountDailyTotals(days))).toEqual([ + "big", + "small", + ]); + }); + + it("builds one zero-filled row per day, keyed by every account", () => { + const series = accountDailyTotals(days); + const ids = accountIdsByTotal(series); + expect(stackedDailyRows(days, ids, series)).toEqual([ + { startDate: "2026-06-01T00:00:00Z", big: 5, small: 1 }, + { startDate: "2026-06-02T00:00:00Z", big: 5, small: 0 }, + ]); + }); +}); + +describe("breakdownByAccount", () => { + it("breaks a tie in totals by account id, matching accountIdsByTotal's order", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "b-account", + name: "", + clusters: [cluster({ amounts: { "price-compute": "10.00" } })], + }, + { + external_customer_id: "a-account", + name: "", + clusters: [cluster({ amounts: { "price-compute": "10.00" } })], + }, + ], + }, + ]; + + const result = breakdownByAccount(days); + + expect(result?.accounts.map((account) => account.id)).toEqual([ + "a-account", + "b-account", + ]); + }); +}); + +describe("pivotBreakdown", () => { + it("returns empty defaults for null days", () => { + expect(pivotBreakdown(null, "all")).toEqual({ + accountIds: [], + rows: [], + orderedAccounts: [], + series: new Map(), + totalSpend: 0, + }); + }); + + it("orders accounts biggest-spender first and sums to the period total", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "small", + name: "", + clusters: [cluster({ amounts: { c: "1.00" } })], + }, + { + external_customer_id: "big", + name: "", + clusters: [cluster({ amounts: { c: "5.00" } })], + }, + ], + }, + ]; + + const result = pivotBreakdown(days, "all"); + + expect(result.accountIds).toEqual(["big", "small"]); + expect( + result.orderedAccounts.map((account) => account.external_customer_id), + ).toEqual(["big", "small"]); + expect(result.rows).toEqual([ + { startDate: "2026-06-01T00:00:00Z", big: 5, small: 1 }, + ]); + expect(result.series.get("big")).toEqual([5]); + expect(result.totalSpend).toBe(6); + }); + + it("restricts to a single region, matching filterDaysByRegion", () => { + const days: CostBreakdownDay[] = [ + { + startDate: "2026-06-01T00:00:00Z", + endDate: "2026-06-02T00:00:00Z", + accounts: [ + { + external_customer_id: "acct", + name: "", + clusters: [ + cluster({ region: "aws/us-east-1", amounts: { c: "3.00" } }), + cluster({ region: "aws/eu-west-1", amounts: { c: "4.00" } }), + ], + }, + ], + }, + ]; + + const result = pivotBreakdown(days, "aws/us-east-1"); + + expect(result.totalSpend).toBe(3); + }); +}); diff --git a/console/src/platform/billing/dailyBreakdown.ts b/console/src/platform/billing/dailyBreakdown.ts new file mode 100644 index 0000000000000..b5b4b14017806 --- /dev/null +++ b/console/src/platform/billing/dailyBreakdown.ts @@ -0,0 +1,269 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { + CostBreakdownAccount, + CostBreakdownCluster, + CostBreakdownDay, +} from "~/api/cloudGlobalApi"; + +/** + * Names aren't available yet (SAS-141/142), so accounts are labelled by their + * `external_customer_id` UUID. The full id is very wide for a chip or a table + * cell, so callers show this short prefix and keep the whole id in a tooltip. + */ +export function shortAccountId(accountId: string): string { + return `${accountId.slice(0, 8)}…`; +} + +/** Sum a cluster's per-price amounts (dollar strings) into a single total. */ +export function clusterTotal(amounts: { [priceId: string]: string }): number { + return Object.values(amounts).reduce( + (sum, amount) => sum + parseFloat(amount), + 0, + ); +} + +/** Total cost of an account across all of its clusters. */ +export function accountTotal(account: CostBreakdownAccount): number { + return account.clusters.reduce( + (sum, cluster) => sum + clusterTotal(cluster.amounts), + 0, + ); +} + +/** + * Uniquely identifies a cluster row within an account across days. Quoted + * Materialize identifiers can contain arbitrary characters, so this encodes + * the fields as a JSON array rather than joining with a delimiter that could + * itself appear inside one of them. + */ +function clusterKey(cluster: CostBreakdownCluster): string { + return JSON.stringify([ + cluster.environment_id, + cluster.cluster_grouping_key, + cluster.category, + cluster.region, + ]); +} + +/** + * Restrict each day's accounts/clusters to a single region, dropping any + * account left with no clusters. `"all"` returns `days` unchanged. + */ +export function filterDaysByRegion( + days: CostBreakdownDay[], + region: "all" | string, +): CostBreakdownDay[] { + if (region === "all") { + return days; + } + return days.map((day) => ({ + ...day, + accounts: day.accounts + .map((account) => ({ + ...account, + clusters: account.clusters.filter( + (cluster) => cluster.region === region, + ), + })) + .filter((account) => account.clusters.length > 0), + })); +} + +/** + * Collapse the per-day buckets into the period aggregate: one entry per + * account, whose clusters' per-price amounts are summed across every day in the + * window. Per-day cost is additive (SAS-134), so this reproduces the period + * total. Used for the per-account comparison table and the single-account + * cluster drilldown. + */ +export function aggregateDays(days: CostBreakdownDay[]): { + accounts: CostBreakdownAccount[]; +} { + const accounts = new Map< + string, + { name: string; clusters: Map } + >(); + for (const day of days) { + for (const account of day.accounts) { + let entry = accounts.get(account.external_customer_id); + if (!entry) { + // Every day bucket carries the same per-account name (SAS-141), so + // the first occurrence's name is as good as any other's. + entry = { name: account.name, clusters: new Map() }; + accounts.set(account.external_customer_id, entry); + } + for (const cluster of account.clusters) { + const key = clusterKey(cluster); + const existing = entry.clusters.get(key); + if (!existing) { + entry.clusters.set(key, { + ...cluster, + amounts: { ...cluster.amounts }, + }); + continue; + } + for (const [priceId, amount] of Object.entries(cluster.amounts)) { + const prev = parseFloat(existing.amounts[priceId] ?? "0"); + existing.amounts[priceId] = (prev + parseFloat(amount)).toString(); + } + } + } + } + return { + accounts: Array.from(accounts.entries()).map( + ([external_customer_id, { name, clusters }]) => ({ + external_customer_id, + name, + clusters: Array.from(clusters.values()), + }), + ), + }; +} + +/** + * Per-account total cost for each day in the window, in `days` order — the + * series behind the stacked-by-account chart and per-account trend sparklines. + * Every account that appears on any day gets a full-length series, zero-filled + * for days it had no usage. Accumulates rather than overwrites, matching + * `aggregateDays`, in case a day's `accounts` ever repeats the same id twice. + */ +export function accountDailyTotals( + days: CostBreakdownDay[], +): Map { + const series = new Map(); + days.forEach((day, dayIndex) => { + for (const account of day.accounts) { + let daily = series.get(account.external_customer_id); + if (!daily) { + daily = new Array(days.length).fill(0); + series.set(account.external_customer_id, daily); + } + daily[dayIndex] += accountTotal(account); + } + }); + return series; +} + +/** + * Account ids ordered by descending period total (ties broken by id for a + * stable order). Drives the stacked-chart layer order, the legend, and the + * comparison table's row order so the biggest spender is on top. Takes an + * already-computed `accountDailyTotals` series rather than `days` so callers + * that need both don't compute it twice. + */ +export function accountIdsByTotal(series: Map): string[] { + const totals = new Map(); + for (const [id, dailyTotals] of series) { + totals.set( + id, + dailyTotals.reduce((sum, amount) => sum + amount, 0), + ); + } + return Array.from(totals.keys()).sort((a, b) => { + const diff = (totals.get(b) ?? 0) - (totals.get(a) ?? 0); + return diff !== 0 ? diff : a.localeCompare(b); + }); +} + +/** + * Per-account spend over a breakdown window, biggest spender first (ties + * broken by id, matching `accountIdsByTotal`), plus the window total. Used to + * itemize the "Last 30 days" row by account. `null` if there's no data. + */ +export function breakdownByAccount( + days: CostBreakdownDay[] | null, +): { total: number; accounts: { id: string; total: number }[] } | null { + if (!days || days.length === 0) { + return null; + } + const accounts = aggregateDays(days) + .accounts.map((account) => ({ + id: account.external_customer_id, + total: accountTotal(account), + })) + .sort((a, b) => b.total - a.total || a.id.localeCompare(b.id)); + if (accounts.length === 0) { + return null; + } + const total = accounts.reduce((sum, account) => sum + account.total, 0); + return { total, accounts }; +} + +/** One stacked-chart row per day: the day plus each account's total for it. */ +export type StackedDailyRow = { startDate: string } & { + [accountId: string]: number | string; +}; + +/** + * Reshape the per-account daily series into one row per day keyed by account + * id — the row shape visx `BarStack` consumes (`keys` = `accountIds`). Every + * account is present on every row (zero-filled), so stacks line up across + * days. Takes an already-computed `accountDailyTotals` series rather than + * `days` so callers that need both don't compute it twice. + */ +export function stackedDailyRows( + days: CostBreakdownDay[], + accountIds: string[], + series: Map, +): StackedDailyRow[] { + return days.map((day, dayIndex) => { + const row: StackedDailyRow = { startDate: day.startDate }; + for (const id of accountIds) { + row[id] = series.get(id)?.[dayIndex] ?? 0; + } + return row; + }); +} + +/** + * Shared pivot of a breakdown window into everything the chart and the + * ledger render: account order (biggest spender first), stacked chart rows, + * per-account daily series, the aggregated accounts in that same order, and + * the period total. Computes `accountDailyTotals` exactly once and derives + * everything else from it, rather than each piece recomputing its own copy. + */ +export function pivotBreakdown( + days: CostBreakdownDay[] | null, + regionFilter: "all" | string, +): { + accountIds: string[]; + rows: StackedDailyRow[]; + orderedAccounts: CostBreakdownAccount[]; + series: Map; + totalSpend: number; +} { + if (!days) { + return { + accountIds: [], + rows: [], + orderedAccounts: [], + series: new Map(), + totalSpend: 0, + }; + } + const filteredDays = filterDaysByRegion(days, regionFilter); + const series = accountDailyTotals(filteredDays); + const accountIds = accountIdsByTotal(series); + const rows = stackedDailyRows(filteredDays, accountIds, series); + const aggregate = aggregateDays(filteredDays); + const orderedAccounts = accountIds + .map((id) => + aggregate.accounts.find((account) => account.external_customer_id === id), + ) + .filter( + (account): account is CostBreakdownAccount => account !== undefined, + ); + const totalSpend = orderedAccounts.reduce( + (sum, account) => sum + accountTotal(account), + 0, + ); + return { accountIds, rows, orderedAccounts, series, totalSpend }; +} diff --git a/console/src/platform/billing/queries.ts b/console/src/platform/billing/queries.ts index 2cba92856a8ee..d23cf513bfb4e 100644 --- a/console/src/platform/billing/queries.ts +++ b/console/src/platform/billing/queries.ts @@ -8,7 +8,6 @@ // by the Apache License, Version 2.0. import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import { addDays, startOfDay, subDays } from "date-fns"; import { useMemo } from "react"; import { queryKeys as authQueryKeys } from "~/api/auth"; @@ -19,15 +18,13 @@ import { import { createStripeSetupIntent, detachPaymentMethod, + getCostsBreakdownDaily, getCredits, - getDailyCosts, Organization, recentInvoices, setDefaultPaymentMethod, } from "~/api/cloudGlobalApi"; -import { nowUTC } from "~/util"; - -import { ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS } from "./constants"; +import { addUtcDays, nowUTC } from "~/util"; export const creditBalanceQueryKeys = { all: () => buildGlobalQueryKey("credits"), @@ -37,11 +34,11 @@ export const invoiceQueryKeys = { all: () => buildGlobalQueryKey("invoices"), }; -export const dailyCostQueryKeys = { - all: () => buildGlobalQueryKey("dailyCosts"), +export const costBreakdownDailyQueryKeys = { + all: () => buildGlobalQueryKey("costBreakdownDaily"), list: (timeSpan: number, queryTime: Date) => [ - ...dailyCostQueryKeys.all(), + ...costBreakdownDailyQueryKeys.all(), buildQueryKeyPart("list", { timeSpan, queryTime, @@ -76,31 +73,33 @@ export function useRecentInvoices() { }); } -export function getTimeRange(span: number): [Date, Date] { - // Some fields on the usage page, such as the rolling average in the plan - // details component, requires a certain number of days' worth of data. That - // span of time may be greater than what is being visually filtered, so set - // the minimum-queried range to what the rolling average needs. - span = Math.max(span, ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS); - const endDate = startOfDay(addDays(nowUTC(), 1)); - endDate.setUTCHours(0, 0, 0, 0); - const startDate = new Date( - subDays(endDate, span) - // Since we're bucketing these by day, start from the beginning of the - // UTC day. - .setUTCHours(0, 0, 0, 0), - ); - return [startDate, endDate]; +// `date-fns`'s `startOfDay`/`addDays` read and set calendar fields in the +// browser's local time zone, not UTC. Near UTC midnight, "local tomorrow" can +// actually be UTC "today" (or "the day after tomorrow"), silently shifting the +// whole window by a day. `addUtcDays` stays entirely within UTC calendar +// arithmetic instead. +export function getDayAlignedRange(span: number): [Date, Date] { + const now = nowUTC(); + return [addUtcDays(now, 1 - span), addUtcDays(now, 1)]; } -export function useDailyCosts(timeSpan: number, queryTime: Date) { +/** + * Per-account, per-cluster breakdown bucketed by UTC day (the Direction-B + * source). Returns the dense `days` array from `/api/costs/breakdown/daily`; + * callers pivot it via `dailyBreakdown.ts` into the roll-up / per-account views. + */ +export function useDailyCostsBreakdown(timeSpan: number, queryTime: Date) { return useQuery({ - queryKey: dailyCostQueryKeys.list(timeSpan, queryTime), + queryKey: costBreakdownDailyQueryKeys.list(timeSpan, queryTime), queryFn: async ({ queryKey, signal }) => { const [_, { timeSpan: queryTimeSpan }] = queryKey; - const [startDate, endDate] = getTimeRange(queryTimeSpan); - const response = await getDailyCosts(startDate, endDate, { signal }); - return response.data; + // Day buckets require a UTC-midnight-aligned window, which + // getDayAlignedRange already produces. + const [startDate, endDate] = getDayAlignedRange(queryTimeSpan); + const response = await getCostsBreakdownDaily(startDate, endDate, { + signal, + }); + return response.data.days; }, }); } diff --git a/console/src/platform/billing/types.ts b/console/src/platform/billing/types.ts index 77a74b5844bd8..bb4090d57e7ca 100644 --- a/console/src/platform/billing/types.ts +++ b/console/src/platform/billing/types.ts @@ -7,30 +7,7 @@ // the Business Source License, use of this software will be governed // by the Apache License, Version 2.0. -import { DailyCostKey } from "~/api/cloudGlobalApi"; - export type RegionGroupedSummary = { total: number; regions: Map; }; - -type ResourceItem = { - usageValue: number; - usageUnits: string; - usagePoints: number[]; - totalCost: number; -}; - -export type ResourceMeasurement = ResourceItem & { - sort: number; - rate: string; -}; - -export type ResourceBreakdown = { - [k in DailyCostKey]: { - total: ResourceItem; - resources: Map; - }; -}; - -export type RegionResourceBreakdown = Map; diff --git a/console/src/platform/billing/utils.ts b/console/src/platform/billing/utils.ts index 6a458c12b09a3..4951ec6bc0435 100644 --- a/console/src/platform/billing/utils.ts +++ b/console/src/platform/billing/utils.ts @@ -8,99 +8,14 @@ // by the Apache License, Version 2.0. import { UTCDate } from "@date-fns/utc"; -import { addDays, addMonths, parseISO, startOfMonth, subDays } from "date-fns"; +import { addMonths, parseISO, startOfMonth, subDays } from "date-fns"; -import { - DailyCostKey, - DailyCosts, - Organization, - Prices, -} from "~/api/cloudGlobalApi"; +import { DailyCosts, Organization } from "~/api/cloudGlobalApi"; import { components } from "~/api/schemas/global-api"; import { CloudRegion } from "~/store/cloudRegions"; -import { assert } from "~/util"; -import { formatDateInUtc, formatUtcIso } from "~/utils/dateFormat"; -import { - costUnits, - replicaSorts, - ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS, -} from "./constants"; -import { RegionGroupedSummary, RegionResourceBreakdown } from "./types"; - -export function aggregateByDay(data: DailyCosts["daily"]) { - const days = new Map(); - for (const slice of data) { - const startDate = parseISO(slice.startDate); - const formattedDate = formatDateInUtc(startDate); - let day = days.get(formattedDate); - if (!day) { - startDate.setUTCHours(0, 0, 0, 0); - day = { - costs: structuredClone(slice.costs), - startDate: formatUtcIso(startDate), - endDate: formatUtcIso(addDays(startDate, 1)), - subtotal: slice.subtotal, - total: slice.total, - }; - } else { - day = rollupSlice(day, slice); - } - days.set(formattedDate, day); - } - return Array.from(days.values()); -} - -function rollupSlice( - day: DailyCosts["daily"][0], - slice: DailyCosts["daily"][0], -): DailyCosts["daily"][0] { - day.subtotal = sumStringFloats(day.subtotal, slice.subtotal); - day.total = sumStringFloats(day.total, slice.total); - for (const costKey of ["storage", "compute"] as const) { - day.costs[costKey].subtotal = sumStringFloats( - day.costs[costKey].subtotal, - slice.costs[costKey].subtotal, - ); - day.costs[costKey].total = sumStringFloats( - day.costs[costKey].total, - slice.costs[costKey].total, - ); - for (const slicePrice of slice.costs[costKey].prices) { - const dayPrice = day.costs[costKey].prices.find((p) => { - return ( - p.regionId === slicePrice.regionId && - // compare replicaIds for compute prices, otherwise just regionId - ("replicaId" in slicePrice && "replicaId" in p - ? slicePrice.replicaId === p.replicaId - : true) - ); - }); - if (dayPrice) { - dayPrice.subtotal = sumStringFloats( - dayPrice.subtotal, - slicePrice.subtotal, - ); - // If the rate is changed, poison the unit amount so we don't attempt - // to do any calculations based on it. if we end up needing this we can - // update the data structure. - dayPrice.unitAmount = - dayPrice.unitAmount === slicePrice.unitAmount - ? dayPrice.unitAmount - : "-1"; - } else { - (day.costs[costKey].prices as Prices[]).push( - structuredClone(slicePrice), - ); - } - } - } - return day; -} - -function sumStringFloats(left: string, right: string): string { - return (parseFloat(left) + parseFloat(right)).toString(); -} +import { ROLLING_AVG_TIME_RANGE_LOOKBACK_DAYS } from "./constants"; +import { RegionGroupedSummary } from "./types"; export function summarizePlanCosts( dailyCosts: DailyCosts["daily"] | null, @@ -167,141 +82,6 @@ export function summarizePlanCosts( return { spanSummary, last30Summary }; } -export function getTimeRangeSlice( - dailyCosts: DailyCosts["daily"] | null, - timeRangeFilter: number, -): DailyCosts["daily"] | null { - if (dailyCosts === null || dailyCosts.length <= timeRangeFilter) { - return dailyCosts; - } - const lastStartDate = parseISO(dailyCosts[dailyCosts.length - 1].startDate); - // Determine the starting date for the time range (subtract one because - // we're starting from the beginning of the last day). - const firstStartDate = subDays(lastStartDate, timeRangeFilter - 1); - let startOffset = -1 * timeRangeFilter; - // Seed the list with the known-minimum number of records from the tail. - const slices = dailyCosts.slice(startOffset); - startOffset--; - // ... then walk backwards from where we left off, prepending all records that - // fall on or after the start of the time range. Since we're counting back - // from the end of the Array, this is an inclusive guard (otherwise we'd omit - // the last element when calling `.at(-n)`). - while (Math.abs(startOffset) <= dailyCosts.length) { - const slice = dailyCosts.at(startOffset); - if (!slice) break; - const sliceStart = parseISO(slice.startDate); - if (firstStartDate.getTime() <= sliceStart.getTime()) { - slices.unshift(slice); - } else { - break; - } - startOffset--; - } - return slices; -} - -export function summarizeResourceCosts( - dailyCosts: DailyCosts["daily"], - totalDays: number, -) { - const breakdown: RegionResourceBreakdown = new Map(); - let previousDate: string | null = null; - let offset = 0; - for (const day of dailyCosts) { - // If a plan is changed mid-day, we may have multiple slices per day. Only - // advance the the index when a change occurs. - const startDate = formatDateInUtc(parseISO(day.startDate)); - if (previousDate === null) { - previousDate = startDate; - } - // If this slice starts on a new day, advance the day offset. - if (previousDate !== startDate) { - previousDate = startDate; - offset++; - } - summarizeDayCost(breakdown, day.costs, offset, "compute", totalDays); - summarizeDayCost(breakdown, day.costs, offset, "storage", totalDays); - } - return breakdown; -} - -function summarizeDayCost( - breakdown: RegionResourceBreakdown, - costs: DailyCosts["daily"][0]["costs"], - dayIx: number, - costKey: DailyCostKey, - totalDays: number, -) { - for (const priceBlock of costs[costKey].prices) { - if (!breakdown.has(priceBlock.regionId)) { - breakdown.set(priceBlock.regionId, getEmptyBreakdown(totalDays)); - } - const regionSummary = breakdown.get(priceBlock.regionId); - assert(regionSummary); - const costSummary = regionSummary[costKey]; - const priceCost = parseFloat(priceBlock.subtotal); - const creditsCost = priceCost / parseFloat(priceBlock.unitAmount); - // Add this cost value (e.g., storage or compute) to the region-wide total for the cost category - costSummary.total.totalCost += priceCost; - costSummary.total.usageValue += creditsCost; - costSummary.total.usagePoints[dayIx] += priceCost; - const resourceType = - "replicaSize" in priceBlock ? priceBlock.replicaSize : "Storage"; - if (!costSummary.resources.has(resourceType)) { - costSummary.resources.set(resourceType, { - usagePoints: Array(costSummary.total.usagePoints.length).fill(0), - totalCost: 0, - sort: getReplicaSort(resourceType), - usageUnits: costUnits[costKey], - usageValue: 0, - rate: "0.00", - }); - } - // Add this cost value (e.g., storage or compute) to the region-wide total - // for the resource (e.g., `xsmall` replica) - const resourceSummary = costSummary.resources.get(resourceType); - assert(resourceSummary); - resourceSummary.usageValue += creditsCost; - resourceSummary.totalCost += priceCost; - resourceSummary.usagePoints[dayIx] += priceCost; - resourceSummary.rate = priceBlock.unitAmount; - } -} - -function getReplicaSort(replicaName: string): number { - if (replicaName.includes("cc")) { - const size = replicaName.split("cc", 1)[0]; - return parseInt(size); - } else if (replicaName.includes("C")) { - const size = replicaName.split("C", 1)[0]; - return parseInt(size) * 100; - } - return replicaSorts.get(replicaName) ?? 0; -} - -function getEmptyBreakdown(days: number) { - return { - compute: { - total: { - usageValue: 0, - usageUnits: costUnits.compute, - usagePoints: Array(days).fill(0), - totalCost: 0, - }, - resources: new Map(), - }, - storage: { - total: { - usageValue: 0, - usageUnits: costUnits.storage, - usagePoints: Array(days).fill(0), - totalCost: 0, - }, - resources: new Map(), - }, - }; -} - export function getIsUpgradedPlan( planType: components["schemas"]["PlanType"] | undefined, ): planType is Exclude { diff --git a/console/src/util.test.ts b/console/src/util.test.ts new file mode 100644 index 0000000000000..bd40d0ae9ddae --- /dev/null +++ b/console/src/util.test.ts @@ -0,0 +1,32 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { describe, expect, it } from "vitest"; + +import { addUtcDays } from "./util"; + +describe("addUtcDays", () => { + it("adds days across a UTC calendar boundary regardless of local time zone", () => { + // 2026-01-01T23:30:00Z: late in the UTC day, so a naive local-time + // implementation could roll to the wrong day depending on the runner's + // time zone. + const date = new Date("2026-01-01T23:30:00Z"); + expect(addUtcDays(date, 1).toISOString()).toBe("2026-01-02T00:00:00.000Z"); + }); + + it("subtracts days with a negative argument", () => { + const date = new Date("2026-03-01T00:00:00Z"); + expect(addUtcDays(date, -1).toISOString()).toBe("2026-02-28T00:00:00.000Z"); + }); + + it("rolls across a month/year boundary", () => { + const date = new Date("2025-12-31T12:00:00Z"); + expect(addUtcDays(date, 1).toISOString()).toBe("2026-01-01T00:00:00.000Z"); + }); +}); diff --git a/console/src/util.ts b/console/src/util.ts index 0d3d22ee6d096..fc14d774fe537 100644 --- a/console/src/util.ts +++ b/console/src/util.ts @@ -211,6 +211,22 @@ export function nowUTC(): Date { ); } +/** + * UTC midnight of the day `days` after `date`'s UTC calendar day (negative + * `days` for before). Pure calendar arithmetic (`Date.UTC` tolerates a day + * value outside 1-31, rolling into the adjacent month), not millisecond + * addition, so this stays correct regardless of `date`'s time component. + */ +export function addUtcDays(date: Date, days: number): Date { + return new Date( + Date.UTC( + date.getUTCFullYear(), + date.getUTCMonth(), + date.getUTCDate() + days, + ), + ); +} + export function exhaustiveGuard(val: never): never { throw new Error(`Unhandled switch case: ${val}`); } diff --git a/console/src/utils/format.ts b/console/src/utils/format.ts index a65076cc62944..2149bef5228a6 100644 --- a/console/src/utils/format.ts +++ b/console/src/utils/format.ts @@ -215,8 +215,8 @@ export function formatDurationForAxis(durationMs: number): string { } } -export const formatPercentage = (percentage: number) => - `${(percentage * 100).toFixed(2)}%`; +export const formatPercentage = (percentage: number, decimals = 2) => + `${(percentage * 100).toFixed(decimals)}%`; /** Units exposed in human-readable duration controls (filters, inputs). */ export type DurationUnit = "seconds" | "minutes" | "hours"; diff --git a/console/src/utils/graph.test.ts b/console/src/utils/graph.test.ts new file mode 100644 index 0000000000000..98bfd3b4d2c00 --- /dev/null +++ b/console/src/utils/graph.test.ts @@ -0,0 +1,39 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +import { describe, expect, it } from "vitest"; + +import { buildXYGraphLayoutProps } from "./graph"; + +describe("buildXYGraphLayoutProps", () => { + it("clamps inner width/height to 0 rather than going negative", () => { + // ParentSize renders once with width/height 0 before its ResizeObserver + // reports the real size. A negative value here would flow into an SVG + // rect's width/height attribute (e.g. GraphEventOverlay), which throws. + const { graphEventOverlayProps } = buildXYGraphLayoutProps({ + width: 0, + height: 0, + margin: { top: 10, right: 0, bottom: 36, left: 50 }, + }); + + expect(graphEventOverlayProps.width).toBe(0); + expect(graphEventOverlayProps.height).toBe(0); + }); + + it("computes the normal positive layout when width/height are non-zero", () => { + const { graphEventOverlayProps } = buildXYGraphLayoutProps({ + width: 300, + height: 200, + margin: { top: 10, right: 0, bottom: 36, left: 50 }, + }); + + expect(graphEventOverlayProps.width).toBe(250); + expect(graphEventOverlayProps.height).toBe(154); + }); +}); diff --git a/console/src/utils/graph.ts b/console/src/utils/graph.ts index 53e63c882522a..5412d1a98eda6 100644 --- a/console/src/utils/graph.ts +++ b/console/src/utils/graph.ts @@ -157,8 +157,12 @@ export function buildXYGraphLayoutProps({ height: number; margin: { top: number; right: number; bottom: number; left: number }; }) { - const innerGraphWidth = width - margin.left - margin.right; - const innerGraphHeight = height - margin.top - margin.bottom; + // Clamped to 0: ParentSize renders once with width/height 0 before its + // ResizeObserver reports the real size, and a negative value here would + // flow into an SVG rect's width/height attribute (e.g. GraphEventOverlay), + // which throws. + const innerGraphWidth = Math.max(0, width - margin.left - margin.right); + const innerGraphHeight = Math.max(0, height - margin.top - margin.bottom); // Uses the SVG coordinate system (ascending top to bottom) const innerGraphTop = margin.top; diff --git a/doc/developer/guide-adapter.md b/doc/developer/guide-adapter.md index bc23ffc0f3156..5f33d134329df 100644 --- a/doc/developer/guide-adapter.md +++ b/doc/developer/guide-adapter.md @@ -213,7 +213,8 @@ compare-and-append. It is a time-of-check to time-of-use gap. - It is safe today only by the fragile accident that the coordinator loop does not yield between the check and the durable commit. Any await later inserted - between them, or any move of the check off the loop, reopens the race. + between them, or any move of the check off the coordinator loop, reopens + the race. - It does not hold across writers. Another `environmentd` that commits a conflicting change to the durable store between this node's in-memory check and its durable commit is not detected. The durable layer does not re-validate a @@ -222,7 +223,8 @@ compare-and-append. It is a time-of-check to time-of-use gap. If you need conflict detection, evaluate the precondition atomically with the commit, a real compare-and-append against the durable store. A check that merely -precedes the write on the loop is not that, even when it reads the right state. +precedes the write on the coordinator loop is not that, even when it reads the +right state. ### Catalog mutations must bump the transient revision or stay invisible @@ -235,6 +237,46 @@ keep the change invisible to session-visible catalog reads (name resolution, planning). Otherwise sessions serve stale catalogs where today they would see the change. +### Group commits and generation handover + +At runtime, one group committer per `environmentd` serializes txns-shard operations: + +```text +append / register / forget -> FIFO group committer -> table-write worker -> txns shard +``` + +FIFO ordering prevents an append from overtaking table registration or forgetting. Bootstrap is +the only local exception because it runs before the process serves. + +Each runtime command uses this protocol: + +```text +shared oracle write timestamp -> advance catalog upper -> compare-and-append txns shard + | conflict -> retry + ` success -> apply write to oracle +``` + +The successful timestamp is applied to the oracle only after the txns write is durable. + +On `environmentd` bootstrap in read/write mode: + +```text +catalog fence -> set up and register tables -> txns write advances table uppers + -> snapshot and reset system tables -> start serving +``` + +The snapshots cannot complete until the txns write has advanced the table uppers. Therefore: + +```text +pre-fence write before barrier -> ordered before the snapshot +pre-fence write after barrier -> `InvalidUppers` -> retry at a fresh timestamp + -> catalog advance observes the fence -> old generation exits +``` + +A system-table write before the barrier is included in the reset. A user-table write remains +visible to later reads. The retry's `advance_to` is above the stale catalog handle's cached upper, +so its catalog check is durable. An `advance_upper` no-op only checks an already-observed fence. + ## Rejected Optimizations This section records specific optimizations that have been attempted and found diff --git a/doc/user/config.toml b/doc/user/config.toml index f3bf3bdb75727..debb0084a363e 100644 --- a/doc/user/config.toml +++ b/doc/user/config.toml @@ -139,6 +139,3 @@ include = "docs/**" # # include = "**.html" # would only include files with ".html" suffix # exclude = "**.{jpg, png}" # would exclude files with ".jpg" or ".png" suffix - -# Avoid deleting self-managed docs which are deployed from the self-managed-docs branches. -exclude = "docs/{self-managed/v25.2}/**" diff --git a/doc/user/content/concepts/_index.md b/doc/user/content/concepts/_index.md index 9eec6f6396947..48c02df590017 100644 --- a/doc/user/content/concepts/_index.md +++ b/doc/user/content/concepts/_index.md @@ -13,6 +13,7 @@ aliases: - /get-started/key-concepts/ - /overview - /self-managed/v25.1/concepts/ + - /self-managed/v25.2/concepts/ --- The pages in this section introduces some of the key concepts in Materialize: diff --git a/doc/user/content/concepts/clusters.md b/doc/user/content/concepts/clusters.md index 5d9632964a35c..141f0d082accd 100644 --- a/doc/user/content/concepts/clusters.md +++ b/doc/user/content/concepts/clusters.md @@ -8,6 +8,7 @@ menu: identifier: 'concepts-clusters' aliases: - /get-started/key-concepts/#clusters + - /self-managed/v25.2/concepts/clusters/ --- ## Overview diff --git a/doc/user/content/concepts/indexes.md b/doc/user/content/concepts/indexes.md index 7a198d69fec95..371f20271f07d 100644 --- a/doc/user/content/concepts/indexes.md +++ b/doc/user/content/concepts/indexes.md @@ -9,6 +9,7 @@ menu: aliases: - /get-started/key-concepts/#indexes - /self-managed/v25.1/concepts/indexes/ + - /self-managed/v25.2/concepts/indexes/ --- ## Overview diff --git a/doc/user/content/concepts/sinks.md b/doc/user/content/concepts/sinks.md index 2a589331aea66..8e3355e39e716 100644 --- a/doc/user/content/concepts/sinks.md +++ b/doc/user/content/concepts/sinks.md @@ -8,6 +8,7 @@ menu: identifier: 'concepts-sinks' aliases: - /get-started/key-concepts/#sinks + - /self-managed/v25.2/concepts/sinks/ --- ## Overview diff --git a/doc/user/content/concepts/sources.md b/doc/user/content/concepts/sources.md index 36281d1d13b39..d58b0dee693a6 100644 --- a/doc/user/content/concepts/sources.md +++ b/doc/user/content/concepts/sources.md @@ -8,6 +8,7 @@ menu: identifier: 'concepts-sources' aliases: - /get-started/key-concepts/#sources + - /self-managed/v25.2/concepts/sources/ --- ## Overview diff --git a/doc/user/content/concepts/views.md b/doc/user/content/concepts/views.md index b147dee7b2c71..fd5e6c9575bb2 100644 --- a/doc/user/content/concepts/views.md +++ b/doc/user/content/concepts/views.md @@ -8,6 +8,7 @@ menu: identifier: 'concepts-views' aliases: - /get-started/key-concepts/#views + - /self-managed/v25.2/concepts/views/ --- ## Overview diff --git a/doc/user/content/console/_index.md b/doc/user/content/console/_index.md index 5c2b8b170663c..ec203c1eaf4af 100644 --- a/doc/user/content/console/_index.md +++ b/doc/user/content/console/_index.md @@ -7,6 +7,9 @@ menus: main: weight: 5 identifier: 'console' +aliases: + - /self-managed/v25.2/console/ + - /self-managed/v25.2/console/integrations/ --- The Materialize Console is a graphical user diff --git a/doc/user/content/headless/sql-server-deployment-guides.md b/doc/user/content/headless/sql-server-deployment-guides.md new file mode 100644 index 0000000000000..7856f68e96a5c --- /dev/null +++ b/doc/user/content/headless/sql-server-deployment-guides.md @@ -0,0 +1,9 @@ +--- +headless: true +--- +{{% note %}} +The exact configuration steps depend on your SQL Server deployment. For +step-by-step instructions, see the integration guides for +[Azure SQL Database](/ingest-data/sql-server/azure-db/) and +[self-hosted or managed SQL Server](/ingest-data/sql-server/self-hosted/). +{{% /note %}} diff --git a/doc/user/content/ingest-data/_index.md b/doc/user/content/ingest-data/_index.md index 11b686308567c..c257690b37d81 100644 --- a/doc/user/content/ingest-data/_index.md +++ b/doc/user/content/ingest-data/_index.md @@ -9,6 +9,9 @@ menu: weight: 11 aliases: - /self-managed/v25.1/ingest-data/ + - /self-managed/v25.2/ingest-data/kafka/amazon-msk/ + - /self-managed/v25.2/ingest-data/kafka/kafka-self-hosted/ + - /self-managed/v25.2/ingest-data/troubleshooting/ --- You can ingest data into Materialize from various external systems: diff --git a/doc/user/content/ingest-data/cdc-cockroachdb.md b/doc/user/content/ingest-data/cdc-cockroachdb.md index b0626399ada59..d23eb52b79f3d 100644 --- a/doc/user/content/ingest-data/cdc-cockroachdb.md +++ b/doc/user/content/ingest-data/cdc-cockroachdb.md @@ -7,6 +7,8 @@ menu: name: "Using Kafka and Changefeeds" identifier: "crdb-kafka-changefeeds" weight: 5 +aliases: + - /self-managed/v25.2/ingest-data/cdc-cockroachdb/ --- {{< tip >}} diff --git a/doc/user/content/ingest-data/kafka/_index.md b/doc/user/content/ingest-data/kafka/_index.md index cd5bedd3b4b9f..1ae9d0a0c04b3 100644 --- a/doc/user/content/ingest-data/kafka/_index.md +++ b/doc/user/content/ingest-data/kafka/_index.md @@ -7,6 +7,8 @@ menu: parent: 'ingest-data' identifier: 'kafka' weight: 20 +aliases: + - /self-managed/v25.2/ingest-data/kafka/ --- Materialize provides native connector for Kafka message broker. To ingest data diff --git a/doc/user/content/ingest-data/kafka/amazon-msk.md b/doc/user/content/ingest-data/kafka/amazon-msk.md index 5eacf6567ac25..d9abe67ba70a5 100644 --- a/doc/user/content/ingest-data/kafka/amazon-msk.md +++ b/doc/user/content/ingest-data/kafka/amazon-msk.md @@ -6,6 +6,7 @@ aliases: - /integrations/amazon-msk/ - /connect-sources/amazon-msk/ - /ingest-data/amazon-msk/ + - /self-managed/v25.2/ingest-data/kafka/amazon-msk/ menu: main: parent: "kafka" diff --git a/doc/user/content/ingest-data/kafka/kafka-self-hosted.md b/doc/user/content/ingest-data/kafka/kafka-self-hosted.md index 1daff9b8afc42..1428987363cc6 100644 --- a/doc/user/content/ingest-data/kafka/kafka-self-hosted.md +++ b/doc/user/content/ingest-data/kafka/kafka-self-hosted.md @@ -7,6 +7,7 @@ aliases: - /connect-sources/amazon-kafka/ - /ingest-data/kafka-self-hosted/ - /ingest-data/kafka/upstash-kafka/ + - /self-managed/v25.2/ingest-data/kafka/kafka-self-hosted/ menu: main: parent: "kafka" diff --git a/doc/user/content/ingest-data/monitoring-data-ingestion.md b/doc/user/content/ingest-data/monitoring-data-ingestion.md index 1d9d660691522..0149e8136482b 100644 --- a/doc/user/content/ingest-data/monitoring-data-ingestion.md +++ b/doc/user/content/ingest-data/monitoring-data-ingestion.md @@ -6,6 +6,8 @@ menu: identifier: ingest-monitoring parent: ingest-data weight: 39 +aliases: + - /self-managed/v25.2/ingest-data/monitoring-data-ingestion/ --- ## Monitoring the snapshotting progress diff --git a/doc/user/content/ingest-data/mysql/_index.md b/doc/user/content/ingest-data/mysql/_index.md index 81a57a11ef8c6..2ead882971a75 100644 --- a/doc/user/content/ingest-data/mysql/_index.md +++ b/doc/user/content/ingest-data/mysql/_index.md @@ -7,6 +7,8 @@ menu: parent: "ingest-data" identifier: "mysql" weight: 5 +aliases: + - /self-managed/v25.2/ingest-data/mysql/ --- ## Change Data Capture (CDC) diff --git a/doc/user/content/ingest-data/network-security/ssh-tunnel.md b/doc/user/content/ingest-data/network-security/ssh-tunnel.md index cf2489fe91152..467750d02fe58 100644 --- a/doc/user/content/ingest-data/network-security/ssh-tunnel.md +++ b/doc/user/content/ingest-data/network-security/ssh-tunnel.md @@ -9,6 +9,7 @@ aliases: - /integrations/postgres-bastion/ - /ops/network-security/ssh-tunnel/ - /connect-sources/ssh-tunnel/ + - /self-managed/v25.2/ingest-data/network-security/ssh-tunnel/ --- {{< tabs >}} diff --git a/doc/user/content/ingest-data/postgres/_index.md b/doc/user/content/ingest-data/postgres/_index.md index d0860e13fd36f..cefdc20d646cf 100644 --- a/doc/user/content/ingest-data/postgres/_index.md +++ b/doc/user/content/ingest-data/postgres/_index.md @@ -9,6 +9,8 @@ menu: identifier: 'postgresql' aliases: - /self-managed/v25.1/ingest-data/postgres/ + - /self-managed/v25.2/ingest-data/postgres/ + - /self-managed/v25.2/ingest-data/postgres/amazon-aurora/ --- ## Change Data Capture (CDC) diff --git a/doc/user/content/ingest-data/sql-server/_index.md b/doc/user/content/ingest-data/sql-server/_index.md index e226bee1525c9..1b36022f37524 100644 --- a/doc/user/content/ingest-data/sql-server/_index.md +++ b/doc/user/content/ingest-data/sql-server/_index.md @@ -37,6 +37,7 @@ Data Capture (CDC) support. ## Integration Guides +- [Azure SQL Database](/ingest-data/sql-server/azure-db/) - [Self-hosted SQL Server](/ingest-data/sql-server/self-hosted/) ## Considerations diff --git a/doc/user/content/ingest-data/sql-server/azure-db.md b/doc/user/content/ingest-data/sql-server/azure-db.md new file mode 100644 index 0000000000000..5f744bab87286 --- /dev/null +++ b/doc/user/content/ingest-data/sql-server/azure-db.md @@ -0,0 +1,349 @@ +--- +title: "Ingest data from Azure SQL Database" +description: "How to stream data from Azure SQL Database to Materialize" +menu: + main: + parent: "sql-server" + name: "Azure SQL Database" + identifier: "sql-server-azure-db" + weight: 70 +--- + +This page shows you how to stream data from [Azure SQL Database](https://azure.microsoft.com/en-us/products/azure-sql/database) +to Materialize using the [SQL Server source](/sql/create-source/sql-server/). + +{{< note >}} +This guide covers **Azure SQL Database**, the single-database service. For +**Azure SQL Managed Instance**, which runs a SQL Server Agent and exposes +`msdb`, follow the [self-hosted SQL Server guide](/ingest-data/sql-server/self-hosted/) +instead. +{{}} + +{{< tip >}} +{{< guided-tour-blurb-for-ingest-data >}} +{{< /tip >}} + +## Before you begin + +- Make sure Change Data Capture (CDC) is available on your Azure SQL Database. + CDC has compute requirements and is not supported on lower service tiers. See + [Azure SQL documentation](https://learn.microsoft.com/en-us/azure/azure-sql/database/change-data-capture-overview?view=azuresql) + for details on service tiers and CDC configuration. + +- Ensure you have access to your database via the [`sqlcmd` client](https://learn.microsoft.com/en-us/sql/tools/sqlcmd/sqlcmd-utility), + or your preferred SQL client, as a member of `db_owner`. + +## A. Configure Azure SQL Database + +{{< note >}} + +To configure Azure SQL Database for data ingestion into Materialize, you must +connect to the database you want to replicate as a member of `db_owner`, which +can enable CDC and create/manage the user, role, and privileges. + +{{}} + +### 1. Create a Materialize user in Azure SQL Database. + +Azure SQL Database is a single-database service. Because it does not provide +reusable server logins or access to the master database for granting +server-scoped permissions, create a [contained database user](https://learn.microsoft.com/en-us/sql/relational-databases/security/contained-database-users-making-your-database-portable) directly in the +database you want to replicate. + +Connect to the database you want to replicate as a member of `db_owner`, then +create the user (replace `` with your own password): + +```sql +CREATE USER materialize WITH PASSWORD = ''; +``` + +Create a gating role for the capture instances and add the user to it: + +```sql +CREATE ROLE materialize_role; +ALTER ROLE materialize_role ADD MEMBER materialize; +``` + +Grant the privileges Materialize needs: + +```sql +-- SELECT on the replicated tables and the CDC change tables. +ALTER ROLE db_datareader ADD MEMBER materialize; + +-- Read access to the transaction-state views used to track replication +-- progress, in place of the server-scoped VIEW SERVER STATE used for +-- self-hosted SQL Server. +GRANT VIEW DATABASE STATE TO materialize; +``` + +{{< note >}} +Unlike self-hosted SQL Server, no explicit grants are issued on the +`sys.fn_cdc_*` functions or the `INFORMATION_SCHEMA` views. They are executable +and readable by default. +{{}} + +### 2. Enable Change-Data-Capture for the database. + +Azure SQL Database drives CDC from an internal scheduler, so **no SQL Server +Agent is required**. Enabling CDC requires the database to be on a service tier +that supports it and that you are a member of `db_owner`. + +Connect to the database you want to replicate and run: + +```sql +EXEC sys.sp_cdc_enable_db; +``` + +For guidance on enabling Change Data Capture on Azure SQL Database, see the +[Azure documentation](https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server?view=azuresqldb-current). + +### 3. Enable `SNAPSHOT` transaction isolation. + +Enable `SNAPSHOT` transaction isolation for the database. Because Azure SQL +Database connections cannot switch databases, use the `CURRENT` keyword to target +the connected database: + +```sql +ALTER DATABASE CURRENT SET ALLOW_SNAPSHOT_ISOLATION ON; +``` + +### 4. Enable Change-Data-Capture for the tables. + +Enable Change Data Capture for each table you wish to replicate, gated by the +role you created above (replace `` and `` with your +schema and table names): + +```sql +EXEC sys.sp_cdc_enable_table + @source_schema = '', + @source_name = '', + @role_name = 'materialize_role', + @supports_net_changes = 0; +``` + +## B. (Optional) Configure network security + +{{< note >}} +If you are prototyping and your Azure SQL Database is publicly accessible, **you +can skip this step**. For production scenarios, we recommend configuring one of +the network security options below. +{{< /note >}} + +There are various ways to configure your database's network to allow Materialize +to connect: + +- **Allow Materialize IPs:** If your database is publicly accessible, you can + configure your database's firewall to allow connections from a set of + static Materialize IP addresses. + +- **Use an SSH tunnel:** If your database is running in a private network, you + can use an SSH tunnel to connect Materialize to the database. + +Select the option that works best for you. + +{{< tabs >}} + +{{< tab "Allow Materialize IPs">}} + +1. In the [SQL Shell](/console/), or your preferred SQL + client connected to Materialize, find the static egress IP addresses for the + Materialize region you are running in: + + ```mzsql + SELECT * FROM mz_egress_ips; + ``` + +1. Update your [Azure SQL Database firewall rules](https://learn.microsoft.com/en-us/azure/azure-sql/database/firewall-configure?view=azuresql) + to allow traffic from each IP address from the previous step. + +{{< /tab >}} + +{{< tab "Use an SSH tunnel">}} + +This assumes your Azure SQL Database is already reachable over a private IP in a +virtual network via an [Azure Private Endpoint](https://learn.microsoft.com/en-us/azure/azure-sql/database/private-endpoint-overview?view=azuresql), +with the `privatelink.database.windows.net` DNS zone integrated so +`.database.windows.net` resolves to the private IP. + +To create the SSH tunnel, you launch an instance to serve as an SSH bastion host +in that network and configure the bastion host to allow traffic from Materialize. +The bastion forwards traffic to the database's private endpoint. + +1. [Launch a Linux VM with a static public IP address](https://learn.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-portal) +to serve as your SSH bastion host. + + - Make sure the VM is publicly accessible and in the same virtual network as + the private endpoint (or a peered network). + - Add a key pair and note the username. You'll use this username when + connecting Materialize to your bastion host. + - Make sure the VM has a static public IP address. You'll use this IP + address when connecting Materialize to your bastion host. + +1. Configure the SSH bastion host to allow traffic from Materialize. + + 1. In the [SQL Shell](/console/), or your preferred + SQL client connected to Materialize, get the static egress IP addresses for + the Materialize region you are running in: + + ```mzsql + SELECT * FROM mz_egress_ips; + ``` + + 1. Update your SSH bastion host's [firewall rules](https://learn.microsoft.com/en-us/azure/virtual-network/tutorial-filter-network-traffic?toc=%2Fazure%2Fvirtual-machines%2Ftoc.json) + to allow SSH traffic from each IP address from the previous step. + +1. Set the server's [connection policy](https://learn.microsoft.com/en-us/azure/azure-sql/database/connectivity-architecture?view=azuresql#connection-policy) + to **Proxy**: + + ```sh + az sql server conn-policy update \ + --resource-group \ + --server \ + --connection-type Proxy + ``` + + With the `Redirect` policy, the gateway tells the client to reconnect + directly to the backend node on a high port, which bypasses the single port + the SSH tunnel forwards. `Proxy` keeps all traffic on the gateway at port + 1433, which is the port the tunnel forwards. + + If the connection policy is left as `Redirect`, creating the source or + validating the connection fails with an error like: + + ```text + Server requested a connection to an alternative address: + `.worker.database.windows.net:` + ``` + +{{< /tab >}} + +{{< /tabs >}} + +## C. Ingest data in Materialize + +### 1. (Optional) Create a cluster + +{{< note >}} +If you are prototyping and already have a cluster to host your SQL Server +source (e.g. `quickstart`), **you can skip this step**. For production +scenarios, we recommend separating your workloads into multiple clusters for +[resource isolation](/sql/create-cluster/#resource-isolation). +{{< /note >}} + +{{% sql-server-direct/create-a-cluster %}} + +### 2. Create a connection + +Once you have configured your network, create a connection in Materialize per +your networking configuration. Azure SQL Database **requires an encrypted +connection**, so the SQL Server connection must specify `SSL MODE 'required'`. + +{{< tabs >}} + +{{< tab "Allow Materialize IPs">}} +{{% sql-server-direct/ingesting-data/allow-materialize-ips %}} +{{< /tab >}} + +{{< tab "Use an SSH tunnel">}} + +1. In the [SQL Shell](/console/), or your preferred SQL + client connected to Materialize, use the [`CREATE CONNECTION`](/sql/create-connection/#ssh-tunnel) + command to create an SSH tunnel connection: + + ```mzsql + CREATE CONNECTION ssh_connection TO SSH TUNNEL ( + HOST '', + PORT , + USER '' + ); + ``` + + - Replace `` and `` with the public IP + address and port of the SSH bastion host you created + [earlier](#b-optional-configure-network-security). + + - Replace `` with the username for the key pair you created + for your SSH bastion host. + +1. Get Materialize's public keys for the SSH tunnel connection: + + ```mzsql + SELECT * FROM mz_ssh_tunnel_connections; + ``` + +1. Log in to your SSH bastion host and add Materialize's public keys to the + `authorized_keys` file, for example: + + ```sh + # Command for Linux + echo "ssh-ed25519 AAAA...76RH materialize" >> ~/.ssh/authorized_keys + echo "ssh-ed25519 AAAA...hLYV materialize" >> ~/.ssh/authorized_keys + ``` + +1. Back in the SQL client connected to Materialize, validate the SSH tunnel + connection you created using the [`VALIDATE CONNECTION`](/sql/validate-connection) + command: + + ```mzsql + VALIDATE CONNECTION ssh_connection; + ``` + + If no validation error is returned, move to the next step. + +1. Use the [`CREATE SECRET`](/sql/create-secret/) command to securely store the + password for the `materialize` user + [you created](#1-create-a-materialize-user-in-azure-sql-database): + + ```mzsql + CREATE SECRET sqlserver_pass AS ''; + ``` + +1. Use the [`CREATE CONNECTION`](/sql/create-connection/) command to create the + SQL Server connection, routed through the SSH tunnel. Azure SQL Database + requires an encrypted connection, so include `SSL MODE 'required'`: + + ```mzsql + CREATE CONNECTION sqlserver_connection TO SQL SERVER ( + HOST '', + PORT 1433, + USER 'materialize', + PASSWORD SECRET sqlserver_pass, + DATABASE '', + SSL MODE 'required', + SSH TUNNEL ssh_connection + ); + ``` + + - Replace `` with your Azure SQL Database endpoint, and `` + with the database you'd like to connect to. + +{{< /tab >}} + +{{< /tabs >}} + +### 3. Start ingesting data + +{{< note >}} +For a new SQL Server source, if none of the replicating tables +are receiving write queries, snapshotting may take up to an additional 5 minutes +to complete. For details, see [snapshot latency for inactive databases](#snapshot-latency-for-inactive-databases) +{{}} + +{{% include-example file="examples/ingest_data/sql_server/create_source_cloud" example="create-source" %}} + +{{% include-example file="examples/ingest_data/sql_server/create_source_cloud" example="create-source-options" %}} + +{{% include-example file="examples/ingest_data/sql_server/create_source_cloud" +example="schema-changes" %}} + +### 4. Right-size the cluster + +{{% sql-server-direct/right-size-the-cluster %}} + +## D. Explore your data + +{{% sql-server-direct/next-steps %}} + +## Considerations + +{{% include-headless "/headless/sql-server-considerations" %}} diff --git a/doc/user/content/ingest-data/troubleshooting.md b/doc/user/content/ingest-data/troubleshooting.md index 9e9d050273e33..8da3c5beee13d 100644 --- a/doc/user/content/ingest-data/troubleshooting.md +++ b/doc/user/content/ingest-data/troubleshooting.md @@ -10,6 +10,7 @@ menu: aliases: - /ops/diagnosing-using-sql/ - /ops/troubleshooting/ + - /self-managed/v25.2/ingest-data/troubleshooting/ --- As you wire up data ingestion in Materialize, you might run into some snags or diff --git a/doc/user/content/integrations/_index.md b/doc/user/content/integrations/_index.md index 4d40ed41689f3..6d6cbaafad745 100644 --- a/doc/user/content/integrations/_index.md +++ b/doc/user/content/integrations/_index.md @@ -4,11 +4,17 @@ description: "Get details about third-party tools and integrations supported by make_table_row_headers_searchable: true disable_list: true aliases: - - /third-party/supported-tools/ - - /third-party/ - - /third-party/postgres-cloud/ - - /guides/postgres-cloud/ - - /guides/ + - /third-party/supported-tools/ + - /third-party/ + - /third-party/postgres-cloud/ + - /guides/postgres-cloud/ + - /guides/ + - /self-managed/v25.2/integrations/mz-debug/ + - /self-managed/v25.2/integrations/mz-debug/self-managed/ + - /self-managed/v25.2/integrations/mz-debug/emulator/ + - /self-managed/v25.2/integrations/http-api/ + - /self-managed/v25.2/integrations/websocket-api/ + - /self-managed/v25.2/integrations/llm/ menu: main: identifier: "integrations" diff --git a/doc/user/content/integrations/cli/_index.md b/doc/user/content/integrations/cli/_index.md index e166a9b7e8708..045c6d25390dd 100644 --- a/doc/user/content/integrations/cli/_index.md +++ b/doc/user/content/integrations/cli/_index.md @@ -8,6 +8,8 @@ menu: identifier: cli weight: 99 disable_list: true +aliases: + - /self-managed/v25.2/integrations/cli/ --- The Materialize command-line interface (CLI), lets you interact with diff --git a/doc/user/content/integrations/cli/reference/_index.md b/doc/user/content/integrations/cli/reference/_index.md index 044e81e98ff73..bc5f14cf40506 100644 --- a/doc/user/content/integrations/cli/reference/_index.md +++ b/doc/user/content/integrations/cli/reference/_index.md @@ -7,4 +7,6 @@ menu: name: "`mz` Reference" identifier: cli-reference weight: 6 +aliases: + - /self-managed/v25.2/integrations/cli/reference/ --- diff --git a/doc/user/content/integrations/cli/reference/profile.md b/doc/user/content/integrations/cli/reference/profile.md index db727bbe50c28..6cc361ad9d95f 100644 --- a/doc/user/content/integrations/cli/reference/profile.md +++ b/doc/user/content/integrations/cli/reference/profile.md @@ -5,6 +5,8 @@ menu: main: parent: cli-reference weight: 1 +aliases: + - /self-managed/v25.2/integrations/cli/reference/profile/ --- The `mz profile` command manages [authentication profiles] for `mz`. diff --git a/doc/user/content/integrations/cli/reference/user.md b/doc/user/content/integrations/cli/reference/user.md index b0c17a19fb78d..07889e22a409e 100644 --- a/doc/user/content/integrations/cli/reference/user.md +++ b/doc/user/content/integrations/cli/reference/user.md @@ -5,6 +5,8 @@ menu: main: parent: cli-reference weight: 1 +aliases: + - /self-managed/v25.2/integrations/cli/reference/user/ --- The `mz user` command manages users in your organization. diff --git a/doc/user/content/license.md b/doc/user/content/license.md index 578d0d8cdd4cc..f2e9d47111964 100644 --- a/doc/user/content/license.md +++ b/doc/user/content/license.md @@ -5,6 +5,8 @@ menu: main: parent: 'about' weight: 15 +aliases: + - /self-managed/v25.2/license/ --- ## Materialize Cloud diff --git a/doc/user/content/manage/_index.md b/doc/user/content/manage/_index.md index 13068dbea24e6..cd85c660bbe23 100644 --- a/doc/user/content/manage/_index.md +++ b/doc/user/content/manage/_index.md @@ -6,6 +6,25 @@ menu: main: identifier: "manage" weight: 50 +aliases: + - /self-managed/v25.2/manage/ + - /self-managed/v25.2/manage/authentication/ + - /self-managed/v25.2/manage/monitor/ + - /self-managed/v25.2/manage/monitor/prometheus/ + - /self-managed/v25.2/manage/monitor/datadog/ + - /self-managed/v25.2/manage/monitor/alerting/ + - /self-managed/v25.2/manage/dbt/ + - /self-managed/v25.2/manage/dbt/get-started/ + - /self-managed/v25.2/manage/dbt/development-workflows/ + - /self-managed/v25.2/manage/dbt/blue-green-deployments/ + - /self-managed/v25.2/manage/dbt/slim-deployments/ + - /self-managed/v25.2/manage/operational-guidelines/ + - /self-managed/v25.2/manage/terraform/ + - /self-managed/v25.2/manage/terraform/get-started/ + - /self-managed/v25.2/manage/terraform/manage-resources/ + - /self-managed/v25.2/manage/terraform/manage-cloud-modules/ + - /self-managed/v25.2/manage/terraform/appendix-secret-stores/ + - /self-managed/v25.2/administration/usage/ --- This section contains various resources for managing Materialize. diff --git a/doc/user/content/manage/dbt/_index.md b/doc/user/content/manage/dbt/_index.md index df1e161e35dab..0606f3478eda7 100644 --- a/doc/user/content/manage/dbt/_index.md +++ b/doc/user/content/manage/dbt/_index.md @@ -6,6 +6,8 @@ aliases: - /guides/dbt/ - /third-party/dbt/ - /integrations/dbt/ + - /self-managed/v25.2/manage/dbt/get-started/ + - /self-managed/v25.2/manage/dbt/ menu: main: parent: manage diff --git a/doc/user/content/releases/_index.md b/doc/user/content/releases/_index.md index afab6a680ee34..5c2213df79dad 100644 --- a/doc/user/content/releases/_index.md +++ b/doc/user/content/releases/_index.md @@ -8,6 +8,10 @@ menu: weight: 80 aliases: - /self-managed/v25.1/release-notes/ + - /self-managed/v25.2/release-notes/ + - /self-managed/v25.2/release-notes/compatibility/ + - /self-managed/v25.2/release-notes/versioning_lifecycle/ + - /self-managed/v25.2/release-notes/compatibility/ --- {{< note >}} diff --git a/doc/user/content/security/self-managed/_index.md b/doc/user/content/security/self-managed/_index.md index 35d8ed7b59ff9..0bd2f3c0fd6f6 100644 --- a/doc/user/content/security/self-managed/_index.md +++ b/doc/user/content/security/self-managed/_index.md @@ -8,6 +8,14 @@ menu: parent: "security" identifier: "security-sm" weight: 20 +aliases: + - /self-managed/v25.2/manage/access-control/ + - /self-managed/v25.2/manage/access-control/manage-roles/ + - /self-managed/v25.2/manage/access-control/appendix-privileges/ + - /self-managed/v25.2/manage/access-control/appendix-command-privileges/ + - /self-managed/v25.2/manage/access-control/appendix-built-in-roles/ + - /self-managed/v25.2/manage/access-control/rbac-terraform-tutorial/ + - /self-managed/v25.2/manage/appendix-alternative-cluster-architectures/ --- This section covers security for Self-Managed Materialize. diff --git a/doc/user/content/self-managed-deployments/_index.md b/doc/user/content/self-managed-deployments/_index.md index 03d46e946cc50..2fe6951743984 100644 --- a/doc/user/content/self-managed-deployments/_index.md +++ b/doc/user/content/self-managed-deployments/_index.md @@ -5,6 +5,30 @@ disable_list: true aliases: - /self-hosted/concepts/ - /self-managed-deployments/appendix/legacy/appendix-legacy-terraform-releases/ + - /self-managed/ + - /self-managed/v25.2/ + - /self-managed/v25.2/installation/ + - /self-managed/v25.2/installation/configuration/ + - /self-managed/v25.2/installation/install-on-aws/ + - /self-managed/v25.2/installation/install-on-aws/upgrade-on-aws/ + - /self-managed/v25.2/installation/install-on-aws/appendix-aws-configuration/ + - /self-managed/v25.2/installation/install-on-awsappendix-deployment-guidelines/ + - /self-managed/v25.2/installation/install-on-gcp/ + - /self-managed/v25.2/installation/install-on-gcp/appendix-gcp-configuration/ + - /self-managed/v25.2/installation/install-on-azure/ + - /self-managed/v25.2/installation/install-on-azureappendix-deployment-guidelines/ + - /self-managed/v25.2/installation/install-on-azureappendix-azure-configuration/ + - /self-managed/v25.2/installation/install-on-azure/upgrade-on-azure/ + - /self-managed/v25.2/installation/install-on-local-kind/ + - /self-managed/v25.2/installation/install-on-local-minikube/ + - /self-managed/v25.2/installation/install-on-local-minikubeupgrade-on-local-minikube/ + - /self-managed/v25.2/installation/operational-guidelines/ + - /self-managed/v25.2/installation/troubleshooting/ + - /self-managed/v25.2/installation/appendix-terraforms/ + - /self-managed/v25.2/installation/upgrading/ + - /self-managed/v25.2/installation/troubleshooting/ + - /self-managed/v25.2/installation/upgrade-to-swap/ + menu: main: identifier: "sm-deployments" diff --git a/doc/user/content/self-managed/_index.md b/doc/user/content/self-managed/_index.md deleted file mode 100644 index c2ede8fb60ce6..0000000000000 --- a/doc/user/content/self-managed/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Self-managed Materialize" -description: "" -aliases: - - /self-hosted/ -robots: "noindex, nofollow" -draft: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/_index.md b/doc/user/content/self-managed/v25.2/_index.md deleted file mode 100644 index 5030a6cdee6e8..0000000000000 --- a/doc/user/content/self-managed/v25.2/_index.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Self-managed Materialize" -description: "" -aliases: - - /self-managed/ - - /lts/sql/create-source/file/ - - /lts/sql/create-source/kafka/ - - /lts/sql/types/float/ - - /lts/sql/create-source/s3/ - - /lts/sql/types/integer/ - - /lts/sql/show-index/ - - /lts/overview/timelines/ - - /lts/sql/create-source/kinesis/ - - /lts/integrations/sql-clients/ - - /lts/sql/create-source/pubnub/ - - /lts/sql/types/timestamp/ - - /lts/ - - /lts/sql/create-source/materialize-cdc/ - - /lts/install/ - - /lts/ops/monitoring/ - - /lts/overview/architecture/ - - /lts/integrations/aws-aurora/ - - /lts/overview/arrangements/ - - /lts/sql/create-source/ - - /lts/sql/functions/date-bin-hopping/ - - /lts/sql/functions/list_agg/ - - /lts/sql/patterns/top-k/ - - /lts/sql/types/array/ - - /lts/sql/types/text/ - - /lts/get-started/ - - /lts/integrations/debezium/ - - /lts/license/ - - /lts/overview/ - - /lts/sql/ - - /lts/sql/alter-index/ - - /lts/sql/execute/ - - /lts/sql/functions/csv_extract/ - - /lts/sql/functions/justify-days/ - - /lts/sql/prepare/ - - /lts/sql/show-columns/ - - /lts/sql/show-create-sink/ - - /lts/reference/system-catalog/ - - /lts/sql/types/interval/ - - /lts/support/ - - /lts/integrations/ - - /lts/integrations/aws-msk/ - - /lts/integrations/aws-rds/ - - /lts/integrations/dbt/ - - /lts/integrations/golang/ - - /lts/integrations/metabase/ - - /lts/ops/optimization/ - - /lts/ops/troubleshooting/ - - /lts/overview/key-concepts/ - - /lts/quickstarts/live-analytics/ - - /lts/quickstarts/log-parsing/ - - /lts/sql/commit/ - - /lts/sql/copy-from/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/_index.md b/doc/user/content/self-managed/v25.2/installation/_index.md deleted file mode 100644 index eccf9287b802f..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Installation" -description: "Installation guides for Self-Managed Materialize." -disable_list: true -aliases: - - /self-managed/installation/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/configuration.md b/doc/user/content/self-managed/v25.2/installation/configuration.md deleted file mode 100644 index ff086bf308ad1..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/configuration.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Materialize Operator Configuration" -description: "" -aliases: - - /self-hosted/configuration/ - - /self-managed/configuration/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/install-on-aws.md b/doc/user/content/self-managed/v25.2/installation/install-on-aws.md deleted file mode 100644 index 8c94084270466..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/install-on-aws.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Install on AWS" -description: "" -aliases: - - /self-managed/installation/install-on-aws/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/install-on-gcp.md b/doc/user/content/self-managed/v25.2/installation/install-on-gcp.md deleted file mode 100644 index 7badbb5930455..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/install-on-gcp.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Install on GCP" -description: "" -aliases: - - /self-managed/installation/install-on-gcp/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/install-on-local-kind.md b/doc/user/content/self-managed/v25.2/installation/install-on-local-kind.md deleted file mode 100644 index 25f8b8b7b5186..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/install-on-local-kind.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Install locally on kind" -description: "" -aliases: - - /self-hosted/install-on-local-kind/ - - /self-managed/installation/install-on-local-kind/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/install-on-local-minikube.md b/doc/user/content/self-managed/v25.2/installation/install-on-local-minikube.md deleted file mode 100644 index 1f275c2158dbf..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/install-on-local-minikube.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "Install locally on minikube" -description: "" -aliases: - - /self-managed/installation/install-on-local-minikube/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/operational-guidelines.md b/doc/user/content/self-managed/v25.2/installation/operational-guidelines.md deleted file mode 100644 index 160da0f2cac39..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/operational-guidelines.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Operational guidelines" -description: "" -robots: "noindex, nofollow" -aliases: - - /self-managed/operational-guidelines/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/troubleshooting.md b/doc/user/content/self-managed/v25.2/installation/troubleshooting.md deleted file mode 100644 index 1b8d2346afd9e..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/troubleshooting.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Troubleshooting" -description: "" -aliases: - - /self-hosted/troubleshooting/ - - /self-managed/troubleshooting/ -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/self-managed/v25.2/installation/upgrading.md b/doc/user/content/self-managed/v25.2/installation/upgrading.md deleted file mode 100644 index b2d8cfeb6082e..0000000000000 --- a/doc/user/content/self-managed/v25.2/installation/upgrading.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Upgrading" -description: "Upgrading Helm chart and Materialize." -suppress_breadcrumb: true ---- - - diff --git a/doc/user/content/serve-results/_index.md b/doc/user/content/serve-results/_index.md index 2afd678e99e54..00a2184cf5904 100644 --- a/doc/user/content/serve-results/_index.md +++ b/doc/user/content/serve-results/_index.md @@ -6,6 +6,10 @@ menus: main: weight: 15 identifier: 'serve-results' +aliases: + - /self-managed/v25.2/serve-results/ + - /self-managed/v25.2/serve-results/query-results/ + - /self-managed/v25.2/serve-results/bi-tools/ --- In Materialize, indexed views and materialized views maintain up-to-date query diff --git a/doc/user/content/serve-results/sink/_index.md b/doc/user/content/serve-results/sink/_index.md index 10a053706d3c2..70e8b4f7d8cd6 100644 --- a/doc/user/content/serve-results/sink/_index.md +++ b/doc/user/content/serve-results/sink/_index.md @@ -8,6 +8,14 @@ menu: name: "Sink results" identifier: 'sink' weight: 40 +aliases: + - /self-managed/v25.2/serve-results/sink/ + - /self-managed/v25.2/serve-results/sink/s3/ + - /self-managed/v25.2/serve-results/sink/s3_compatible/ + - /self-managed/v25.2/serve-results/sink/census/ + - /self-managed/v25.2/serve-results/sink/kafka/ + - /self-managed/v25.2/serve-results/sink/snowflake/ + - /self-managed/v25.2/serve-results/sink/sink-troubleshooting/ --- A [sink](/concepts/sinks/) describes the external system you want Materialize to diff --git a/doc/user/content/serve-results/sink/kafka.md b/doc/user/content/serve-results/sink/kafka.md index d4e11fc9ae667..beaf46889a2da 100644 --- a/doc/user/content/serve-results/sink/kafka.md +++ b/doc/user/content/serve-results/sink/kafka.md @@ -109,8 +109,8 @@ By default, Materialize assigns a partition to each message using the following strategy: 1. Encode the message's key in the specified format. - 2. If the format uses a Confluent Schema Registry, strip out the - schema ID from the encoded bytes. + 2. If the format uses a schema registry (Confluent or AWS Glue), strip out + the header carrying the schema ID from the encoded bytes. 3. Hash the remaining encoded bytes using [SeaHash]. 4. Divide the hash value by the topic's partition count and assign the remainder as the message's partition. diff --git a/doc/user/content/sql/_index.md b/doc/user/content/sql/_index.md index a2e6618fdae5a..9f498378309bf 100644 --- a/doc/user/content/sql/_index.md +++ b/doc/user/content/sql/_index.md @@ -9,6 +9,30 @@ menu: weight: 100 aliases: - /sql/alter-owner/ + - /self-managed/v25.2/sql/ + - /self-managed/v25.2/sql/alter-system-set/ + - /self-managed/v25.2/sql/alter-system-reset/ + - /self-managed/v25.2/sql/alter-swap/ + - /self-managed/v25.2/sql/alter-role/ + - /self-managed/v25.2/sql/alter-owner/ + - /self-managed/v25.2/sql/alter-rename/ + - /self-managed/v25.2/sql/create-materialized-view/ + - /self-managed/v25.2/sql/create-cluster/ + - /self-managed/v25.2/sql/create-connection/ + - /self-managed/v25.2/sql/create-role/ + - /self-managed/v25.2/sql/create-sink/ + - /self-managed/v25.2/sql/create-sink/kafka/ + - /self-managed/v25.2/sql/set/ + - /self-managed/v25.2/sql/show/ + - /self-managed/v25.2/sql/show-roles/ + - /self-managed/v25.2/sql/appendix-cluster-sizes/ + - /self-managed/v25.2/sql/system-clusters/ + - /self-managed/v25.2/sql/system-catalog/ + - /self-managed/v25.2/sql/system-catalog/mz_catalog/ + - /self-managed/v25.2/sql/system-catalog/pg_catalog/ + - /self-managed/v25.2/sql/system-catalog/mz_internal/ + - /self-managed/v25.2/sql/system-catalog/mz_introspection/ + - /self-managed/v25.2/sql/system-catalog/information_schema/ --- ## Create/Alter/Drop Objects diff --git a/doc/user/content/sql/create-connection.md b/doc/user/content/sql/create-connection.md index f27c5287dfa8e..f9d1910c9b4e1 100644 --- a/doc/user/content/sql/create-connection.md +++ b/doc/user/content/sql/create-connection.md @@ -625,8 +625,8 @@ CREATE CONNECTION csr_ssh TO CONFLUENT SCHEMA REGISTRY ( An AWS Glue Schema Registry connection establishes a link to an [AWS Glue Schema Registry]. You can use AWS Glue Schema Registry connections in the `FORMAT` -clause of [`CREATE SOURCE`] statements to decode Avro-encoded messages whose -schemas are managed in AWS Glue. +clause of [`CREATE SOURCE`] statements to decode Avro-encoded messages, and of +[`CREATE SINK`] statements to encode them, with schemas managed in AWS Glue. The connection authenticates to AWS through a separate [AWS connection](#aws), which supplies the credentials and region. See [AWS](#aws) for how to grant @@ -651,15 +651,21 @@ CREATE CONNECTION glue_conn TO AWS GLUE SCHEMA REGISTRY ( #### Permissions {#glue-permissions} -The IAM role assumed by the [AWS connection](#aws) must be allowed to read -schemas from the registry. Materialize uses the following AWS Glue actions: +The IAM role assumed by the [AWS connection](#aws) must be allowed to access the +registry. Sources only read. Sinks also register schemas. Materialize uses the +following AWS Glue actions: | Action | When it is used | |--------|-----------------| | `glue:GetRegistry` | At connection creation, to validate the connection. Only required when `VALIDATE` is `true` (the default). | -| `glue:GetSchemaVersion` | When a source is created, to pin the schema, and at runtime, to fetch the writer schema for each new schema version encountered. Always required. | +| `glue:GetSchemaVersion` | Source: when the source is created, to pin the schema, and at runtime, to fetch the writer schema for each new schema version encountered. Sink: to poll a newly registered schema version until it becomes available. Always required. | +| `glue:GetSchemaByDefinition` | Sink, to find an existing version matching the schema being registered. | +| `glue:RegisterSchemaVersion` | Sink, to add a version to an existing schema. | +| `glue:CreateSchema` | Sink, to create a schema on its first publish. | +| `glue:GetSchema` | Sink, to read an existing schema's compatibility level and warn when it differs from the requested one. Optional. | -A least-privilege policy scoped to a single registry looks like: +A least-privilege policy for a source, scoped to a single registry, grants only +the read actions: ```json { @@ -680,9 +686,35 @@ A least-privilege policy scoped to a single registry looks like: } ``` +A sink additionally needs the schema-write actions on the same resources: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "glue:GetRegistry", + "glue:GetSchemaVersion", + "glue:GetSchemaByDefinition", + "glue:RegisterSchemaVersion", + "glue:CreateSchema", + "glue:GetSchema" + ], + "Resource": [ + "arn:aws:glue:::registry/", + "arn:aws:glue:::schema//*" + ] + } + ] +} +``` + If you create the connection with `WITH (VALIDATE = false)`, you can omit -`glue:GetRegistry` and grant only `glue:GetSchemaVersion`. For details on -creating and authorizing the AWS connection, see [AWS](#aws). +`glue:GetRegistry`. The registry itself must already exist. Materialize sinks +create and version schemas within it but never create the registry. For details +on creating and authorizing the AWS connection, see [AWS](#aws). ### MySQL diff --git a/doc/user/content/sql/create-sink/kafka.md b/doc/user/content/sql/create-sink/kafka.md index 14d497820dd01..f17fd4cb46dad 100644 --- a/doc/user/content/sql/create-sink/kafka.md +++ b/doc/user/content/sql/create-sink/kafka.md @@ -119,7 +119,7 @@ For example, consider a table with two columns named `col-a` and `col@a`. Materialize will use the names `col_a` and `col_a1`, respectively, in the generated Avro schema. -When using a Confluent Schema Registry: +#### Using Confluent Schema Registry * Materialize will automatically publish Avro schemas for the key, if present, and the value to the registry. @@ -134,6 +134,56 @@ When using a Confluent Schema Registry: * You can [add `doc` fields](#avro-schema-documentation) to the Avro schemas. + * You can set the compatibility level for a subject with the `KEY COMPATIBILITY + LEVEL` and `VALUE COMPATIBILITY LEVEL` [options](#schema-compatibility-levels). + The level is applied only when the subject has no compatibility level yet. If + the subject already has one, it is left unchanged. + +#### Using [AWS Glue Schema Registry](/sql/create-connection/#aws-glue-schema-registry) + +{{< private-preview />}} + + * Materialize registers Avro schemas for the key, if present, and the value in + the registry named by the connection. The registry must already exist. + + * By default, each schema is named after the topic (`-value`, and + `-key` when a key is present). You can override these with the + `KEY SCHEMA NAME` and `VALUE SCHEMA NAME` options. + + * You can set the compatibility level applied to a newly created schema with + the `KEY COMPATIBILITY LEVEL` and `VALUE COMPATIBILITY LEVEL` + [options](#syntax), defaulting to `BACKWARD` when omitted. The level is set + only when Materialize creates the schema. If the schema already exists, the + sink adds a new version to it and leaves its compatibility level unchanged. + + * The `AVRO ... FULLNAME`, `NULL DEFAULTS`, and `doc` options are not supported. + +##### Compatibility levels + +To specify compatibility levels, use the Confluent compatibility level names shown +below. The table also shows the equivalent AWS Glue compatibility levels for +reference. AWS Glue's `DISABLED` compatibility level has no equivalent Confluent +compatibility level and is not supported. + +Compatibility level | AWS Glue equivalent +--------------------|-------------------- +`BACKWARD` | `BACKWARD` +`BACKWARD_TRANSITIVE` | `BACKWARD_ALL` +`FORWARD` | `FORWARD` +`FORWARD_TRANSITIVE` | `FORWARD_ALL` +`FULL` | `FULL` +`FULL_TRANSITIVE` | `FULL_ALL` +`NONE` | `NONE` + + +#### Publishing Schemas + +With either registry, Materialize publishes the schemas when the sink starts +running, not when you run `CREATE SINK`. The schema names and definitions are not +validated against the registry at `CREATE SINK` time, so registry errors (for +example a name that collides with an incompatible existing schema) surface once +the sink starts publishing rather than at creation. + SQL types are converted to Avro types according to the following conversion table: @@ -392,8 +442,8 @@ By default, Materialize assigns a partition to each message using the following strategy: 1. Encode the message's key in the specified format. - 2. If the format uses a Confluent Schema Registry, strip out the - schema ID from the encoded bytes. + 2. If the format uses a schema registry (Confluent or AWS Glue), strip out + the header carrying the schema ID from the encoded bytes. 3. Hash the remaining encoded bytes using [SeaHash]. 4. Divide the hash value by the topic's partition count and assign the remainder as the message's partition. @@ -602,7 +652,11 @@ CREATE CONNECTION kafka_connection TO KAFKA ( {{< /tab >}} {{< /tabs >}} -#### Confluent Schema Registry +#### Schema Registry + + +{{< tabs tabID="1" >}} +{{< tab "Confluent" >}} {{< tabs tabID="1" >}} {{< tab "SSL">}} @@ -638,12 +692,31 @@ CREATE CONNECTION csr_basic_http {{< /tab >}} {{< /tabs >}} +{{< /tab >}} +{{< tab "AWS Glue" >}} + +{{< private-preview />}} + +```mzsql +CREATE CONNECTION aws_conn TO AWS ( + ASSUME ROLE ARN = 'arn:aws:iam::123456789000:role/MaterializeGlue' +); + +CREATE CONNECTION glue_conn TO AWS GLUE SCHEMA REGISTRY ( + AWS CONNECTION = aws_conn, + REGISTRY = 'my-registry' +); +``` + +{{< /tab >}} +{{< /tabs >}} + ### Creating a sink #### Upsert envelope {{< tabs >}} -{{< tab "Avro">}} +{{< tab "Avro Confluent">}} ```mzsql CREATE SINK avro_sink @@ -653,6 +726,29 @@ CREATE SINK avro_sink FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_connection ENVELOPE UPSERT; ``` +{{< /tab >}} +{{< tab "Avro AWS Glue">}} + +{{< private-preview />}} + +The registry named by the connection must already exist. The IAM role assumed +by the AWS connection must have the schema-write permissions listed under [AWS +Glue Schema Registry](/sql/create-connection/#aws-glue-schema-registry). + +```mzsql +CREATE SINK glue_sink + IN CLUSTER my_io_cluster + FROM + INTO KAFKA CONNECTION kafka_connection ( + TOPIC 'test_avro_topic' + ) + KEY (key_col) + FORMAT AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION glue_conn + ENVELOPE UPSERT; +``` + +See [Avro](#avro) for the schema-name defaults and how compatibility levels map +to their AWS Glue equivalents. {{< /tab >}} {{< tab "JSON">}} @@ -672,7 +768,7 @@ CREATE SINK json_sink #### Debezium envelope {{< tabs >}} -{{< tab "Avro">}} +{{< tab "Avro Confluent">}} ```mzsql CREATE SINK avro_sink @@ -681,6 +777,31 @@ CREATE SINK avro_sink FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_connection ENVELOPE DEBEZIUM; ``` + +{{< /tab >}} +{{< tab "Avro AWS Glue">}} + +{{< private-preview />}} +The registry named by the connection must already exist. The IAM role assumed +by the AWS connection must have the schema-write permissions listed under [AWS +Glue Schema Registry](/sql/create-connection/#aws-glue-schema-registry). + +```mzsql +CREATE SINK glue_sink + IN CLUSTER my_io_cluster + FROM + INTO KAFKA CONNECTION kafka_connection ( + TOPIC 'test_avro_topic' + ) + KEY (key_col) + FORMAT AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION glue_conn + ENVELOPE DEBEZIUM; +``` + +See [Avro](#avro) for the schema-name defaults and how compatibility levels map +to their AWS Glue equivalents. + + {{< /tab >}} {{< /tabs >}} @@ -703,12 +824,16 @@ CREATE SINK custom_topic_sink #### Schema compatibility levels + +{{< tabs >}} +{{< tab "Avro Confluent">}} + ```mzsql CREATE SINK compatibility_level_sink IN CLUSTER my_io_cluster FROM INTO KAFKA CONNECTION kafka_connection ( - TOPIC 'test_avro_topic', + TOPIC 'test_avro_topic' ) FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_connection ( KEY COMPATIBILITY LEVEL 'BACKWARD', @@ -717,8 +842,35 @@ CREATE SINK compatibility_level_sink ENVELOPE UPSERT; ``` +{{< /tab >}} +{{< tab "Avro AWS Glue">}} + +{{< private-preview />}} +```mzsql +CREATE SINK compatibility_level_sink + IN CLUSTER my_io_cluster + FROM + INTO KAFKA CONNECTION kafka_connection ( + TOPIC 'test_avro_topic' + ) + KEY (key_col) + FORMAT AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION glue_conn ( + KEY COMPATIBILITY LEVEL 'BACKWARD', + VALUE COMPATIBILITY LEVEL 'FULL' + ) + ENVELOPE UPSERT; +``` + +See [Avro](#avro) for the schema-name defaults and how compatibility levels map +to their AWS Glue equivalents. + + +{{< /tab >}} +{{< /tabs >}} + #### Documentation comments + Consider the following sink, `docs_sink`, built on top of a relation `t` with several [SQL comments](/sql/comment-on) attached. diff --git a/doc/user/content/sql/create-source/_index.md b/doc/user/content/sql/create-source/_index.md index 168869569c7bc..5f46384a21757 100644 --- a/doc/user/content/sql/create-source/_index.md +++ b/doc/user/content/sql/create-source/_index.md @@ -6,6 +6,14 @@ menu: main: parent: commands identifier: 'create-source' +aliases: + - /self-managed/v25.2/sql/create-source/ + - /self-managed/v25.2/sql/create-source/kafka/ + - /self-managed/v25.2/sql/create-source/mysql/ + - /self-managed/v25.2/sql/create-source/postgres/ + - /self-managed/v25.2/sql/create-source/sql-server/ + - /self-managed/v25.2/sql/create-source/load-generator/ + - /self-managed/v25.2/sql/create-source/webhook/ --- {{% include-headless "/headless/source-definition" %}} diff --git a/doc/user/content/sql/create-source/sql-server-v2.md b/doc/user/content/sql/create-source/sql-server-v2.md index 92bbb0dab3967..28addf9972b85 100644 --- a/doc/user/content/sql/create-source/sql-server-v2.md +++ b/doc/user/content/sql/create-source/sql-server-v2.md @@ -32,6 +32,8 @@ for the database that you would like to replicate. Server](#prerequisite-creating-a-connection-to-sql-server) in Materialize. - The connection setup depends on your network security configuration. +{{% include-headless "/headless/sql-server-deployment-guides" %}} + ## Syntax {{% include-syntax file="examples/create_source_sql_server" example="syntax" %}} @@ -154,7 +156,9 @@ an SSH bastion server to accept connections from Materialize, check #### Creating the source in Materialize -You **must** enable Change Data Capture, see [Enable Change Data Capture SQL Server Instructions](/ingest-data/sql-server/self-hosted/#a-configure-sql-server). +You **must** enable Change Data Capture. See the setup instructions for +[Azure SQL Database](/ingest-data/sql-server/azure-db/#a-configure-azure-sql-database) +or [self-hosted SQL Server](/ingest-data/sql-server/self-hosted/#a-configure-sql-server). Once CDC is enabled for all of the tables you wish to create subsources for, you can create a `SOURCE` in Materialize to begin replicating data! diff --git a/doc/user/content/sql/create-source/sql-server.md b/doc/user/content/sql/create-source/sql-server.md index 4c194f0340f2c..314be876a5358 100644 --- a/doc/user/content/sql/create-source/sql-server.md +++ b/doc/user/content/sql/create-source/sql-server.md @@ -23,6 +23,8 @@ for the database that you would like to replicate. Then [create a connection](#c in Materialize that specifies access and authentication parameters. {{% /create-source/intro %}} +{{% include-headless "/headless/sql-server-deployment-guides" %}} + ## Syntax {{% include-syntax file="examples/create_source_sql_server_legacy" example="syntax" %}} @@ -168,7 +170,9 @@ an SSH bastion server to accept connections from Materialize, check ### Creating a source {#create-source-example} -You **must** enable Change Data Capture, see [Enable Change Data Capture SQL Server Instructions](/ingest-data/sql-server/self-hosted/#a-configure-sql-server). +You **must** enable Change Data Capture. See the setup instructions for +[Azure SQL Database](/ingest-data/sql-server/azure-db/#a-configure-azure-sql-database) +or [self-hosted SQL Server](/ingest-data/sql-server/self-hosted/#a-configure-sql-server). Once CDC is enabled for all of the relevant tables, you can create a `SOURCE` in Materialize to begin replicating data! diff --git a/doc/user/content/sql/types/_index.md b/doc/user/content/sql/types/_index.md index 71456bd50fd66..6a996305a8bc0 100644 --- a/doc/user/content/sql/types/_index.md +++ b/doc/user/content/sql/types/_index.md @@ -8,6 +8,9 @@ menu: parent: sql weight: 110 disable_list: true +aliases: + - /self-managed/v25.2/sql/types/list/ + - /self-managed/v25.2/sql/types/ --- Materialize's type system consists of two classes of types: diff --git a/doc/user/content/support.md b/doc/user/content/support.md index aabb77f693c2f..fc3a5a5ac243d 100644 --- a/doc/user/content/support.md +++ b/doc/user/content/support.md @@ -5,6 +5,8 @@ menu: main: parent: 'about' weight: 10 +aliases: + - /self-managed/v25.2/support/ --- Whether you're building, scaling, or debugging, we're here to help. diff --git a/doc/user/content/transform-data/_index.md b/doc/user/content/transform-data/_index.md index 0938eaa48b89c..b8c475fb5ec03 100644 --- a/doc/user/content/transform-data/_index.md +++ b/doc/user/content/transform-data/_index.md @@ -9,6 +9,7 @@ menu: identifier: transform-overview aliases: - /self-managed/v25.1/transform-data/troubleshooting/ + - /self-managed/v25.2/transform-data/ --- With Materialize, you use SQL to transform your fast-changing data into **live diff --git a/doc/user/content/transform-data/dataflow-troubleshooting.md b/doc/user/content/transform-data/dataflow-troubleshooting.md index 140cccb1aa23e..5419ff6acd580 100644 --- a/doc/user/content/transform-data/dataflow-troubleshooting.md +++ b/doc/user/content/transform-data/dataflow-troubleshooting.md @@ -7,6 +7,8 @@ menu: identifier: dataflow-troubleshooting parent: transform-data weight: 88 +aliases: + - /self-managed/v25.2/transform-data/troubleshooting/ --- If you're unable to troubleshoot your issue using the [`Ingest data`](/ingest-data/troubleshooting/) diff --git a/doc/user/content/transform-data/faq.md b/doc/user/content/transform-data/faq.md index 95dac85be933b..4b921c6b0ddb8 100644 --- a/doc/user/content/transform-data/faq.md +++ b/doc/user/content/transform-data/faq.md @@ -7,6 +7,8 @@ menu: identifier: faq-indexes parent: transform-data weight: 100 +aliases: + - /self-managed/v25.2/transform-data/faq/ --- ## Do indexes in Materialize support `ORDER BY`? diff --git a/doc/user/content/transform-data/idiomatic-materialize-sql/_index.md b/doc/user/content/transform-data/idiomatic-materialize-sql/_index.md index 12a9615418c8a..c861cf4b2e0de 100644 --- a/doc/user/content/transform-data/idiomatic-materialize-sql/_index.md +++ b/doc/user/content/transform-data/idiomatic-materialize-sql/_index.md @@ -10,6 +10,15 @@ menu: aliases: - /transform-data/patterns/window-functions/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/first-value/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/last-value/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/any/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/lag/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/lead/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/mz_now/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/top-k/ + - /self-managed/v25.2/transform-data/idiomatic-materialize-sql/appendix/ --- Materialize follows the SQL standard (SQL-92) implementation and strives for diff --git a/doc/user/content/transform-data/patterns/durable-subscriptions.md b/doc/user/content/transform-data/patterns/durable-subscriptions.md index d41440aaaa2a1..6549ae70028c2 100644 --- a/doc/user/content/transform-data/patterns/durable-subscriptions.md +++ b/doc/user/content/transform-data/patterns/durable-subscriptions.md @@ -7,6 +7,7 @@ menu: aliases: - /transform-data/patterns/time-travel-queries/ - /transform-data/patterns/time-travel-queries/#history-retention-period + - /self-managed/v25.2/transform-data/patterns/durable-subscriptions/ --- [//]: # "TODO: Move to Serve results section" diff --git a/doc/user/content/transform-data/patterns/partition-by.md b/doc/user/content/transform-data/patterns/partition-by.md index e5fe1098b94ed..8ba93b4fd7fba 100644 --- a/doc/user/content/transform-data/patterns/partition-by.md +++ b/doc/user/content/transform-data/patterns/partition-by.md @@ -4,6 +4,7 @@ description: "Declare how collections are stored." aliases: - /guides/partition-by/ - /sql/patterns/partition-by/ + - /self-managed/v25.2/transform-data/patterns/partition-by/ menu: main: parent: 'sql-patterns' diff --git a/doc/user/content/transform-data/patterns/percentiles.md b/doc/user/content/transform-data/patterns/percentiles.md index 64f58f176c6fa..bb734b61d0a10 100644 --- a/doc/user/content/transform-data/patterns/percentiles.md +++ b/doc/user/content/transform-data/patterns/percentiles.md @@ -3,6 +3,7 @@ title: "Percentile calculation" description: "How to use histograms to efficiently calculate percentiles in Materialize." aliases: - /sql/patterns/percentiles/ + - /self-managed/v25.2/transform-data/patterns/percentiles/ menu: main: parent: 'sql-patterns' diff --git a/doc/user/content/transform-data/patterns/rules-engine.md b/doc/user/content/transform-data/patterns/rules-engine.md index 1d8e48cf1d69e..85a1894927152 100644 --- a/doc/user/content/transform-data/patterns/rules-engine.md +++ b/doc/user/content/transform-data/patterns/rules-engine.md @@ -4,6 +4,7 @@ description: "Encode rules as data and apply them using lateral joins." aliases: - /guides/rules-engine/ - /sql/patterns/rules-engine/ + - /self-managed/v25.2/transform-data/patterns/rules-engine/ menu: main: parent: 'sql-patterns' diff --git a/doc/user/content/transform-data/patterns/temporal-filters.md b/doc/user/content/transform-data/patterns/temporal-filters.md index 76b3da7358a87..a6ba58ad5c78d 100644 --- a/doc/user/content/transform-data/patterns/temporal-filters.md +++ b/doc/user/content/transform-data/patterns/temporal-filters.md @@ -4,6 +4,7 @@ description: "Perform time-windowed computation over temporal data." aliases: - /guides/temporal-filters/ - /sql/patterns/temporal-filters/ + - /self-managed/v25.2/transform-data/patterns/temporal-filters/ menu: main: parent: 'sql-patterns' diff --git a/doc/user/data/examples/create_connection.yml b/doc/user/data/examples/create_connection.yml index 90b794e5a41af..57486bb95b9cd 100644 --- a/doc/user/data/examples/create_connection.yml +++ b/doc/user/data/examples/create_connection.yml @@ -381,8 +381,10 @@ description: | *Value:* `text`. Required. - The name of the AWS Glue Schema Registry to read schemas from (for - example, `default-registry`). Must not be empty. + The name of the AWS Glue Schema Registry to use (for example, + `default-registry`). Sources read schemas from the registry, and sinks + register schemas in it. The registry must already exist. Must not be + empty. - name: "`WITH ()`" description: | The following `` are supported: diff --git a/doc/user/data/examples/create_sink_kafka.yml b/doc/user/data/examples/create_sink_kafka.yml index d01483037c5e6..121c089421d8d 100644 --- a/doc/user/data/examples/create_sink_kafka.yml +++ b/doc/user/data/examples/create_sink_kafka.yml @@ -15,16 +15,25 @@ ) [KEY ( [, ...] ) [NOT ENFORCED]] [HEADERS ] - FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION [ - ( - [AVRO KEY FULLNAME ''] - [, AVRO VALUE FULLNAME ''] - [, NULL DEFAULTS ] - [, DOC ON [, ...]] - [, KEY COMPATIBILITY LEVEL ''] - [, VALUE COMPATIBILITY LEVEL ''] - ) - ] + FORMAT AVRO + USING CONFLUENT SCHEMA REGISTRY CONNECTION [ + ( + [AVRO KEY FULLNAME ''] + [, AVRO VALUE FULLNAME ''] + [, NULL DEFAULTS ] + [, DOC ON [, ...]] + [, KEY COMPATIBILITY LEVEL ''] + [, VALUE COMPATIBILITY LEVEL ''] + ) + ] + | USING AWS GLUE SCHEMA REGISTRY CONNECTION [ + ( + [KEY SCHEMA NAME ''] + [, VALUE SCHEMA NAME ''] + [, KEY COMPATIBILITY LEVEL ''] + [, VALUE COMPATIBILITY LEVEL ''] + ) + ] [ENVELOPE DEBEZIUM | UPSERT] [WITH (SNAPSHOT = )] syntax_elements: @@ -76,18 +85,34 @@ - name: "**FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION** ``" description: | Encode messages using Avro format with schemas published to the Confluent Schema Registry. + - name: "**FORMAT AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION** ``" + description: | + ***Private preview.** This feature is under active development.* + + Encode messages using Avro format with schemas registered in the AWS + Glue Schema Registry named by the [AWS Glue Schema Registry + connection](/sql/create-connection/#aws-glue-schema-registry). The + registry must already exist. Only the `KEY SCHEMA NAME`, `VALUE SCHEMA + NAME`, `KEY COMPATIBILITY LEVEL`, and `VALUE COMPATIBILITY LEVEL` + options are supported. See [Avro](#avro) for details. - name: "**AVRO KEY FULLNAME** `''`" description: | - Optional. Default: `row`. Sets the Avro fullname on the generated key schema, if a `KEY` is specified. When used, a value must be specified for `AVRO VALUE FULLNAME`. + Optional, Confluent Schema Registry only. Default: `row`. Sets the Avro fullname on the generated key schema, if a `KEY` is specified. When used, a value must be specified for `AVRO VALUE FULLNAME`. - name: "**AVRO VALUE FULLNAME** `''`" description: | - Optional. Default: `envelope`. Sets the Avro fullname on the generated value schema. When `KEY` is specified, `AVRO KEY FULLNAME` must additionally be specified. + Optional, Confluent Schema Registry only. Default: `envelope`. Sets the Avro fullname on the generated value schema. When `KEY` is specified, `AVRO KEY FULLNAME` must additionally be specified. - name: "**NULL DEFAULTS** ``" description: | - Optional. Default: `false`. Whether to automatically default nullable fields to `null` in the generated schemas. + Optional, Confluent Schema Registry only. Default: `false`. Whether to automatically default nullable fields to `null` in the generated schemas. + - name: "**KEY SCHEMA NAME** `''`" + description: | + Optional, AWS Glue Schema Registry only. The name under which the key schema is registered, if a `KEY` is specified. Default: `-key`. + - name: "**VALUE SCHEMA NAME** `''`" + description: | + Optional, AWS Glue Schema Registry only. The name under which the value schema is registered. Default: `-value`. - name: "**DOC ON** `` [, ...]" description: | - Optional. Add a documentation comment to the generated Avro schemas. + Optional, Confluent Schema Registry only. Add a documentation comment to the generated Avro schemas. | Option | Description | |--------|-------------| @@ -102,10 +127,10 @@ on how documentation comments are added to the generated Avro schemas. - name: "**KEY COMPATIBILITY LEVEL** `''`" description: | - Optional. If specified, set the [Compatibility Level](https://docs.confluent.io/platform/7.6/schema-registry/fundamentals/schema-evolution.html#schema-evolution-and-compatibility) for the generated key schema to one of: `BACKWARD`, `BACKWARD_TRANSITIVE`, `FORWARD`, `FORWARD_TRANSITIVE`, `FULL`, `FULL_TRANSITIVE`, `NONE`. + Optional. If specified, set the [Compatibility Level](https://docs.confluent.io/platform/7.6/schema-registry/fundamentals/schema-evolution.html#schema-evolution-and-compatibility) for the generated key schema to one of: `BACKWARD`, `BACKWARD_TRANSITIVE`, `FORWARD`, `FORWARD_TRANSITIVE`, `FULL`, `FULL_TRANSITIVE`, `NONE`. With AWS Glue, the level is applied only when the sink creates the schema and maps to the [Glue equivalent](#avro). - name: "**VALUE COMPATIBILITY LEVEL** `''`" description: | - Optional. If specified, set the [Compatibility Level](https://docs.confluent.io/platform/7.6/schema-registry/fundamentals/schema-evolution.html#schema-evolution-and-compatibility) for the generated value schema to one of: `BACKWARD`, `BACKWARD_TRANSITIVE`, `FORWARD`, `FORWARD_TRANSITIVE`, `FULL`, `FULL_TRANSITIVE`, `NONE`. + Optional. If specified, set the [Compatibility Level](https://docs.confluent.io/platform/7.6/schema-registry/fundamentals/schema-evolution.html#schema-evolution-and-compatibility) for the generated value schema to one of: `BACKWARD`, `BACKWARD_TRANSITIVE`, `FORWARD`, `FORWARD_TRANSITIVE`, `FULL`, `FULL_TRANSITIVE`, `NONE`. With AWS Glue, the level is applied only when the sink creates the schema and maps to the [Glue equivalent](#avro). - name: "**ENVELOPE** ``" description: | Optional. Specifies how changes to the sink's upstream relation are mapped to Kafka messages. Valid envelope types: @@ -316,6 +341,14 @@ -- [, VALUE COMPATIBILITY LEVEL ''] -- ) -- ] + -- | AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION [ + -- ( + -- [KEY SCHEMA NAME ''] + -- [, VALUE SCHEMA NAME ''] + -- [, KEY COMPATIBILITY LEVEL ''] + -- [, VALUE COMPATIBILITY LEVEL ''] + -- ) + -- ] -- | JSON | TEXT | BYTES [ENVELOPE DEBEZIUM | UPSERT] [WITH (SNAPSHOT = )] @@ -367,10 +400,10 @@ Optional. A column containing headers to add to each Kafka message emitted by the sink. The column must be of type `map[text => text]` or `map[text => bytea]`. See [Headers](#headers) for details. - name: "**KEY FORMAT** ``" description: | - Set the key encoding explicitly. Supported formats: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, `BYTES`. + Set the key encoding explicitly. Supported formats: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, `BYTES`. - name: "**VALUE FORMAT** ``" description: | - Set the value encoding explicitly. Supported formats: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, `BYTES`. + Set the value encoding explicitly. Supported formats: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, `BYTES`. - name: "**ENVELOPE** ``" description: | Optional. Specifies how changes to the sink's upstream relation are mapped to Kafka messages. Valid envelope types: diff --git a/doc/user/data/examples/explain_schema.yml b/doc/user/data/examples/explain_schema.yml index 426a83fc540af..d1ba1a4cc6bff 100644 --- a/doc/user/data/examples/explain_schema.yml +++ b/doc/user/data/examples/explain_schema.yml @@ -70,7 +70,7 @@ Optional. A column containing headers to add to each Kafka message emitted by the sink. The column must be of type `map[text => text]` or `map[text => bytea]`. See [Headers](/sql/create-sink/kafka/#headers) for details. - name: "**FORMAT** ``" description: | - Optional. Specifies the format to use for both keys and values: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, or `BYTES`. See [Formats](/sql/create-sink/kafka/#formats) for details. + Optional. Specifies the format to use for both keys and values: `AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION `, `AVRO USING AWS GLUE SCHEMA REGISTRY CONNECTION `, `JSON`, `TEXT`, or `BYTES`. See [Formats](/sql/create-sink/kafka/#formats) for details. - name: "**KEY FORMAT** `` **VALUE FORMAT** ``" description: | Optional. Specifies the key format and value formats separately. See [Formats](/sql/create-sink/kafka/#formats) for details. diff --git a/doc/user/data/metrics.yml b/doc/user/data/metrics.yml index 0b86c03d379d2..adf345779a0e1 100644 --- a/doc/user/data/metrics.yml +++ b/doc/user/data/metrics.yml @@ -809,17 +809,17 @@ metrics: source: src/adapter/src/metrics.rs visibility: internal - name: mz_group_commit_catalog_upper_seconds_bucket - help: The time it takes to advance the catalog shard upper during group commit. + help: The time it takes to advance the catalog shard upper for a txns-shard write (group commits and table register/forget). labels: - le source: src/adapter/src/metrics.rs visibility: internal - name: mz_group_commit_catalog_upper_seconds_count - help: The time it takes to advance the catalog shard upper during group commit. + help: The time it takes to advance the catalog shard upper for a txns-shard write (group commits and table register/forget). source: src/adapter/src/metrics.rs visibility: internal - name: mz_group_commit_catalog_upper_seconds_sum - help: The time it takes to advance the catalog shard upper during group commit. + help: The time it takes to advance the catalog shard upper for a txns-shard write (group commits and table register/forget). source: src/adapter/src/metrics.rs visibility: internal - name: mz_handle_scheduling_decisions_seconds_bucket diff --git a/misc/python/materialize/checks/all_checks/cluster.py b/misc/python/materialize/checks/all_checks/cluster.py index 51803de87fa35..7a401463ae6c9 100644 --- a/misc/python/materialize/checks/all_checks/cluster.py +++ b/misc/python/materialize/checks/all_checks/cluster.py @@ -67,9 +67,12 @@ def validate(self) -> Testdrive: >[version<15500] SHOW CREATE CLUSTER create_cluster2; create_cluster2 "CREATE CLUSTER \\"create_cluster2\\" (DISK = true, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" - >[version>=15500] SHOW CREATE CLUSTER create_cluster2; + >[15500<=version<2603400] SHOW CREATE CLUSTER create_cluster2; create_cluster2 "CREATE CLUSTER \\"create_cluster2\\" (INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + >[version>=2603400] SHOW CREATE CLUSTER create_cluster2; + create_cluster2 "CREATE CLUSTER \\"create_cluster2\\" (EXPERIMENTAL ARRANGEMENT COMPRESSION = false, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + > DROP TABLE create_cluster1_table CASCADE; > DROP TABLE create_cluster2_table CASCADE; """)) @@ -117,9 +120,12 @@ def validate(self) -> Testdrive: >[version<15500] SHOW CREATE CLUSTER alter_cluster1; alter_cluster1 "CREATE CLUSTER \\"alter_cluster1\\" (DISK = true, INTROSPECTION DEBUGGING = true, INTROSPECTION INTERVAL = INTERVAL '00:00:45', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" - >[version>=15500] SHOW CREATE CLUSTER alter_cluster1; + >[15500<=version<2603400] SHOW CREATE CLUSTER alter_cluster1; alter_cluster1 "CREATE CLUSTER \\"alter_cluster1\\" (INTROSPECTION DEBUGGING = true, INTROSPECTION INTERVAL = INTERVAL '00:00:45', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + >[version>=2603400] SHOW CREATE CLUSTER alter_cluster1; + alter_cluster1 "CREATE CLUSTER \\"alter_cluster1\\" (EXPERIMENTAL ARRANGEMENT COMPRESSION = false, INTROSPECTION DEBUGGING = true, INTROSPECTION INTERVAL = INTERVAL '00:00:45', MANAGED = true, REPLICATION FACTOR = 1, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + > SELECT name, introspection_debugging, introspection_interval FROM mz_catalog.mz_clusters WHERE name = 'alter_cluster1'; alter_cluster1 true "00:00:45" """)) @@ -205,12 +211,18 @@ def validate(self) -> Testdrive: >[version<15500] SHOW CREATE CLUSTER create_cluster_rf0_1; create_cluster_rf0_1 "CREATE CLUSTER \\"create_cluster_rf0_1\\" (DISK = true, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" - >[version>=15500] SHOW CREATE CLUSTER create_cluster_rf0_1; + >[15500<=version<2603400] SHOW CREATE CLUSTER create_cluster_rf0_1; create_cluster_rf0_1 "CREATE CLUSTER \\"create_cluster_rf0_1\\" (INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + >[version>=2603400] SHOW CREATE CLUSTER create_cluster_rf0_1; + create_cluster_rf0_1 "CREATE CLUSTER \\"create_cluster_rf0_1\\" (EXPERIMENTAL ARRANGEMENT COMPRESSION = false, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + >[version<15500] SHOW CREATE CLUSTER create_cluster_rf0_2; create_cluster_rf0_2 "CREATE CLUSTER \\"create_cluster_rf0_2\\" (DISK = true, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" - >[version>=15500] SHOW CREATE CLUSTER create_cluster_rf0_2; + >[15500<=version<2603400] SHOW CREATE CLUSTER create_cluster_rf0_2; create_cluster_rf0_2 "CREATE CLUSTER \\"create_cluster_rf0_2\\" (INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" + + >[version>=2603400] SHOW CREATE CLUSTER create_cluster_rf0_2; + create_cluster_rf0_2 "CREATE CLUSTER \\"create_cluster_rf0_2\\" (EXPERIMENTAL ARRANGEMENT COMPRESSION = false, INTROSPECTION DEBUGGING = false, INTROSPECTION INTERVAL = INTERVAL '00:00:01', MANAGED = true, REPLICATION FACTOR = 0, SIZE = 'scale=2,workers=2', SCHEDULE = MANUAL)" """)) diff --git a/misc/python/materialize/cli/ci_failures.py b/misc/python/materialize/cli/ci_failures.py new file mode 100644 index 0000000000000..4d2e97e3628a3 --- /dev/null +++ b/misc/python/materialize/cli/ci_failures.py @@ -0,0 +1,146 @@ +# Copyright Materialize, Inc. and contributors. All rights reserved. +# +# Use of this software is governed by the Business Source License +# included in the LICENSE file at the root of this repository. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0. +# +# ci_failures.py - Search historical CI failures. + +import argparse +import json +import os +import sys +from datetime import date +from typing import Any + +import requests + +API_URL = "https://ci.dev.materialize.com/api/failures" +TOKEN_URL = "https://ci.dev.materialize.com/tokens" + + +def fetch_failures( + *, + filters: list[dict[str, str]], + search: str | None, + start: int, + size: int, + start_date: str | None, + end_date: str | None, + token: str, +) -> Any: + params: dict[str, str | int] = { + "start": start, + "size": size, + "sorting": json.dumps( + [{"id": "build_date", "desc": True}], separators=(",", ":") + ), + } + if filters: + params["filters"] = json.dumps(filters, separators=(",", ":")) + if search: + params["globalFilter"] = search + if start_date: + params["dateMin"] = start_date + if end_date: + params["dateMax"] = end_date + + response = requests.get( + API_URL, + headers={"Authorization": f"Bearer {token}"}, + params=params, + timeout=30, + ) + response.raise_for_status() + return response.json() + + +def parse_date(value: str) -> str: + try: + date.fromisoformat(value) + except ValueError as error: + raise argparse.ArgumentTypeError("expected YYYY-MM-DD") from error + return value + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser( + prog="ci-failures", + description="Search historical Materialize CI failures. All filters are ANDed.", + ) + parser.add_argument( + "pattern", nargs="?", help="case-insensitive failure content pattern" + ) + parser.add_argument( + "--search", + help="search build, test, issue, content, and branch", + ) + parser.add_argument("--branch", help="only return failures from this branch") + parser.add_argument("--version", help="only return failures from this version") + parser.add_argument("--issue", help="only return failures with this issue") + parser.add_argument("--test", help="only return failures from this test suite") + parser.add_argument("--build", help="only return failures from this build") + parser.add_argument( + "--start-date", type=parse_date, help="earliest build date (YYYY-MM-DD)" + ) + parser.add_argument( + "--end-date", type=parse_date, help="latest build date (YYYY-MM-DD)" + ) + parser.add_argument("--start", type=int, default=0, help="result offset") + parser.add_argument( + "--size", type=int, default=31, help="number of results, from 1 to 100" + ) + args = parser.parse_args(argv) + + if args.start < 0: + parser.error("--start must be nonnegative") + if not 1 <= args.size <= 100: + parser.error("--size must be between 1 and 100") + if args.start_date and args.end_date and args.start_date > args.end_date: + parser.error("--end-date must not be earlier than --start-date") + + token = os.getenv("CI_DASHBOARD_TOKEN") + if not token: + parser.error( + "CI_DASHBOARD_TOKEN is not set. " + f"Create a token manually at {TOKEN_URL}, then export it as " + "CI_DASHBOARD_TOKEN." + ) + + filters = [] + if args.pattern: + filters.append({"id": "content", "value": args.pattern}) + for argument, column in ( + (args.branch, "branch"), + (args.version, "mz_version"), + (args.issue, "issue"), + (args.test, "test_suite"), + (args.build, "build_identifier"), + ): + if argument: + filters.append({"id": column, "value": argument}) + + try: + failures = fetch_failures( + filters=filters, + search=args.search, + start=args.start, + size=args.size, + start_date=args.start_date, + end_date=args.end_date, + token=token, + ) + except requests.RequestException as error: + print(f"ci-failures: request failed: {error}", file=sys.stderr) + return 1 + + json.dump(failures, sys.stdout, indent=2) + sys.stdout.write("\n") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/misc/python/materialize/mzcompose/__init__.py b/misc/python/materialize/mzcompose/__init__.py index bd37da9e3b3d2..359f022cef321 100644 --- a/misc/python/materialize/mzcompose/__init__.py +++ b/misc/python/materialize/mzcompose/__init__.py @@ -702,6 +702,7 @@ def get_default_system_parameters( "sql_server_cdc_cleanup_change_table", "sql_server_cdc_cleanup_change_table_max_deletes", "allow_user_sessions", + "group_commit_max_attempts", "with_0dt_deployment_ddl_check_interval", "enable_0dt_caught_up_check", "with_0dt_caught_up_check_allowed_lag", diff --git a/misc/python/materialize/parallel_workload/action.py b/misc/python/materialize/parallel_workload/action.py index ee1a949413547..31fd590664575 100644 --- a/misc/python/materialize/parallel_workload/action.py +++ b/misc/python/materialize/parallel_workload/action.py @@ -1796,6 +1796,11 @@ def __init__( self.flags_with_values["persist_validate_part_bounds_on_write"] = ( BOOLEAN_FLAG_VALUES ) + self.flags_with_values["group_commit_max_attempts"] = [ + "1", + "100", + "1000", + ] self.flags_with_values["user_id_pool_batch_size"] = [ "1", "5", @@ -2109,32 +2114,65 @@ def __init__( "default_hydration_burst_linger", ] + def errors_to_ignore(self, exe: Executor) -> list[str]: + return [ + # `EXPERIMENTAL ARRANGEMENT COMPRESSION` is managed-only. The + # tracked `managed` flag can lag reality (e.g. an in-flight CREATE + # lost to a kill), so the option can land on a cluster that is + # unmanaged by the time the ALTER runs. + "EXPERIMENTAL ARRANGEMENT COMPRESSION not supported for unmanaged clusters", + ] + super().errors_to_ignore(exe) + def run(self, exe: Executor) -> bool: - flag_name = self.rng.choice(list(self.flags_with_values.keys())) + # A tenth of the time set a random cluster's arrangement dictionary + # compression instead of flipping a global flag. The per-cluster option + # and the global `enable_arrangement_dictionary_compression_alpha` flag + # interact: the flag only gates whether a replica honors the configured + # value at creation time, so exercising both concurrently is what makes + # this interesting. + cluster: Cluster | None = None + flag_name = "" + flag_value = "" - # TODO: Remove when https://linear.app/materializeinc/issue/DB-138 is fixed - if exe.db.scenario == Scenario.ZeroDowntimeDeploy and flag_name.startswith( - "persist_use_critical_since_" - ): - return False + if self.rng.random() < 0.1: + with exe.db.lock: + # Skip the first cluster: it hosts sources and sinks, and a + # compression change reprovisions the cluster's replicas. + # EXPERIMENTAL ARRANGEMENT COMPRESSION is only valid on managed + # clusters. + managed = [c for c in exe.db.clusters[1:] if c.managed] + if not managed: + return False + cluster = self.rng.choice(managed) + else: + flag_name = self.rng.choice(list(self.flags_with_values.keys())) - # `persist_pg_consensus_read_committed` requires a Postgres consensus - # backend. The external scenarios run against CockroachDB, where it - # panics persist, so never flip it on there. - if ( - flag_name == "persist_pg_consensus_read_committed" - and exe.db.scenario in COCKROACH_SCENARIOS - ): - return False + # TODO: Remove when https://linear.app/materializeinc/issue/DB-138 is fixed + if exe.db.scenario == Scenario.ZeroDowntimeDeploy and flag_name.startswith( + "persist_use_critical_since_" + ): + return False - flag_value = self.rng.choice(self.flags_with_values[flag_name]) + # `persist_pg_consensus_read_committed` requires a Postgres consensus + # backend. The external scenarios run against CockroachDB, where it + # panics persist, so never flip it on there. + if ( + flag_name == "persist_pg_consensus_read_committed" + and exe.db.scenario in COCKROACH_SCENARIOS + ): + return False + + flag_value = self.rng.choice(self.flags_with_values[flag_name]) conn = None try: conn = self.create_system_connection(exe) - self.flip_flag(conn, flag_name, flag_value) - exe.db.flags[flag_name] = flag_value + if cluster is not None: + self.set_cluster_compression(conn, cluster) + else: + self.flip_flag(conn, flag_name, flag_value) + exe.db.flags[flag_name] = flag_value return True except OperationalError: # ignore it @@ -2151,6 +2189,18 @@ def flip_flag(self, conn: Connection, flag_name: str, flag_value: str) -> None: f"ALTER SYSTEM SET {flag_name} = {flag_value};".encode(), ) + def set_cluster_compression(self, conn: Connection, cluster: Cluster) -> None: + # Randomly set an explicit value or reset to the default. On a managed + # cluster this reprovisions the controller-owned replicas, so it + # exercises the per-cluster and per-replica configuration path. + if self.rng.choice([True, False]): + value = self.rng.choice(["TRUE", "FALSE"]) + option = f"SET (EXPERIMENTAL ARRANGEMENT COMPRESSION = {value})" + else: + option = "RESET (EXPERIMENTAL ARRANGEMENT COMPRESSION)" + with conn.cursor() as cur: + cur.execute(f"ALTER CLUSTER {cluster} {option};".encode()) + class CreateViewAction(Action): def errors_to_ignore(self, exe: Executor) -> list[str]: diff --git a/misc/python/materialize/parallel_workload/database.py b/misc/python/materialize/parallel_workload/database.py index be35090a72168..32f7aa3d57bb1 100644 --- a/misc/python/materialize/parallel_workload/database.py +++ b/misc/python/materialize/parallel_workload/database.py @@ -58,24 +58,24 @@ from materialize.parallel_workload.expression import ExprKind, expression from materialize.parallel_workload.settings import Complexity, Scenario -MAX_COLUMNS = 5 +MAX_COLUMNS = 50 MAX_INCLUDE_HEADERS = 5 -MAX_ROWS = 50 +MAX_ROWS = 500 MAX_CLUSTERS = 4 MAX_CLUSTER_REPLICAS = 2 -MAX_DBS = 5 -MAX_SCHEMAS = 5 -MAX_TABLES = 5 -MAX_VIEWS = 15 -MAX_INDEXES = 15 -MAX_ROLES = 15 -MAX_WEBHOOK_SOURCES = 5 -MAX_KAFKA_SOURCES = 5 -MAX_MYSQL_SOURCES = 5 -MAX_SQL_SERVER_SOURCES = 5 -MAX_POSTGRES_SOURCES = 5 -MAX_KAFKA_SINKS = 5 -MAX_ICEBERG_SINKS = 5 +MAX_DBS = 50 +MAX_SCHEMAS = 50 +MAX_TABLES = 50 +MAX_VIEWS = 150 +MAX_INDEXES = 150 +MAX_ROLES = 150 +MAX_WEBHOOK_SOURCES = 50 +MAX_KAFKA_SOURCES = 50 +MAX_MYSQL_SOURCES = 50 +MAX_SQL_SERVER_SOURCES = 50 +MAX_POSTGRES_SOURCES = 50 +MAX_KAFKA_SINKS = 50 +MAX_ICEBERG_SINKS = 50 MAX_INITIAL_DBS = 1 MAX_INITIAL_SCHEMAS = 1 diff --git a/misc/python/materialize/parallel_workload/parallel_workload.py b/misc/python/materialize/parallel_workload/parallel_workload.py index 358359b1fe90e..3bdecddac148f 100644 --- a/misc/python/materialize/parallel_workload/parallel_workload.py +++ b/misc/python/materialize/parallel_workload/parallel_workload.py @@ -515,8 +515,10 @@ def print_stats( # attempt when it is rare and the run is DDL-heavy, e.g. SwapSchema), and # the replacement lifecycle refusing a second or a sealed replacement # (ReplaceMaterializedView, whose replacements pile up unfinalized in the - # workload). Tracked separately so such actions don't trip the - # broken-action assertion below. + # workload). "unknown cluster 'dont_exist'" comes from FlipFlags setting the + # default cluster to a nonexistent one to hunt for panics, so any action + # needing a cluster fails with it while that flag is live. Tracked + # separately so such actions don't trip the broken-action assertion below. noise = { "must be owner of", "permission denied for", @@ -524,6 +526,7 @@ def print_stats( "another session modified the catalog while this DDL transaction was open", "because it already has a replacement", "is sealed and thus cannot be replaced", + "unknown cluster 'dont_exist'", } if scenario == Scenario.Rename: # Concurrent renames invalidate the qualified names an action captured diff --git a/misc/python/materialize/zippy/backup_and_restore_actions.py b/misc/python/materialize/zippy/backup_and_restore_actions.py index 130aac4576952..3762ac3813edc 100644 --- a/misc/python/materialize/zippy/backup_and_restore_actions.py +++ b/misc/python/materialize/zippy/backup_and_restore_actions.py @@ -39,6 +39,7 @@ def run(self, c: Composition, state: State) -> None: system_parameter_defaults=state.system_parameter_defaults, sanity_restart=False, restart="on-failure", + additional_system_parameter_defaults=state.additional_system_parameter_defaults, metadata_store="cockroach", default_replication_factor=2, ) diff --git a/misc/python/materialize/zippy/balancerd_actions.py b/misc/python/materialize/zippy/balancerd_actions.py index 9f931bf7d7d55..e74b55aec8761 100644 --- a/misc/python/materialize/zippy/balancerd_actions.py +++ b/misc/python/materialize/zippy/balancerd_actions.py @@ -15,6 +15,20 @@ from materialize.zippy.mz_capabilities import MzIsRunning +def balancerd_service(state: State) -> Balancerd: + """Balancerd configured to route to the current Mz service.""" + return Balancerd( + https_resolver_template=f"{state.mz_service}:6876", + static_resolver_addr=f"{state.mz_service}:6875", + ) + + +def restart_balancerd(c: Composition, state: State) -> None: + with c.override(balancerd_service(state)): + c.kill("balancerd") + c.up("balancerd") + + class BalancerdStart(Action): """Starts balancerd""" @@ -27,12 +41,7 @@ def incompatible_with(cls) -> set[type[Capability]]: return {BalancerdIsRunning} def run(self, c: Composition, state: State) -> None: - with c.override( - Balancerd( - https_resolver_template=f"{state.mz_service}:6876", - static_resolver_addr=f"{state.mz_service}:6875", - ) - ): + with c.override(balancerd_service(state)): c.up("balancerd") def provides(self) -> list[Capability]: @@ -65,11 +74,4 @@ def requires(cls) -> set[type[Capability]]: return {BalancerdIsRunning, MzIsRunning} def run(self, c: Composition, state: State) -> None: - with c.override( - Balancerd( - https_resolver_template=f"{state.mz_service}:6876", - static_resolver_addr=f"{state.mz_service}:6875", - ) - ): - c.kill("balancerd") - c.up("balancerd") + restart_balancerd(c, state) diff --git a/misc/python/materialize/zippy/debezium_actions.py b/misc/python/materialize/zippy/debezium_actions.py index 6711744bfcc07..785ae32675a9e 100644 --- a/misc/python/materialize/zippy/debezium_actions.py +++ b/misc/python/materialize/zippy/debezium_actions.py @@ -35,20 +35,6 @@ def run(self, c: Composition, state: State) -> None: c.up("debezium") -class DebeziumStop(Action): - """Stop the Debezium instance.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {DebeziumRunning} - - def withholds(self) -> set[type[Capability]]: - return {DebeziumRunning} - - def run(self, c: Composition, state: State) -> None: - c.kill("debezium") - - class CreateDebeziumSource(Action): """Creates a Debezium source in Materialized.""" @@ -63,39 +49,47 @@ def requires(cls) -> set[type[Capability]]: } def __init__(self, capabilities: Capabilities) -> None: - # To avoid conflicts, we make sure the postgres table and the debezium source have matching names - postgres_table = random.choice(capabilities.get(PostgresTableExists)) - cluster_name = random.choice(source_capable_clusters(capabilities)) - debezium_source_name = f"debezium_source_{postgres_table.name}" - this_debezium_source = DebeziumSourceExists(name=debezium_source_name) - - existing_debezium_sources = [ - s - for s in capabilities.get(DebeziumSourceExists) - if s.name == this_debezium_source.name - ] - - if len(existing_debezium_sources) == 0: - self.new_debezium_source = True - - self.debezium_source = this_debezium_source - self.postgres_table = postgres_table - self.debezium_source.postgres_table = self.postgres_table - self.cluster_name = cluster_name - elif len(existing_debezium_sources) == 1: - self.new_debezium_source = False - - self.debezium_source = existing_debezium_sources[0] - assert self.debezium_source.postgres_table is not None - self.postgres_table = self.debezium_source.postgres_table - else: - raise RuntimeError("More than one Debezium source exists") + # ENVELOPE DEBEZIUM requires a key, so only Postgres tables with a + # primary key can back a Debezium source. + pk_tables = [t for t in capabilities.get(PostgresTableExists) if t.has_pk] + + self.new_debezium_source = False + self.debezium_source: DebeziumSourceExists | None = None + + if pk_tables: + # To avoid conflicts, we make sure the postgres table and the debezium source have matching names + postgres_table = random.choice(pk_tables) + cluster_name = random.choice(source_capable_clusters(capabilities)) + debezium_source_name = f"debezium_source_{postgres_table.name}" + this_debezium_source = DebeziumSourceExists(name=debezium_source_name) + + existing_debezium_sources = [ + s + for s in capabilities.get(DebeziumSourceExists) + if s.name == this_debezium_source.name + ] + + if len(existing_debezium_sources) == 0: + self.new_debezium_source = True + + self.debezium_source = this_debezium_source + self.postgres_table = postgres_table + self.debezium_source.postgres_table = self.postgres_table + self.cluster_name = cluster_name + elif len(existing_debezium_sources) == 1: + self.debezium_source = existing_debezium_sources[0] + assert self.debezium_source.postgres_table is not None + self.postgres_table = self.debezium_source.postgres_table + else: + raise RuntimeError("More than one Debezium source exists") super().__init__(capabilities) def run(self, c: Composition, state: State) -> None: if self.new_debezium_source: - c.testdrive(dedent(f""" + assert self.debezium_source is not None + c.testdrive( + dedent(f""" $ http-request method=POST url=http://debezium:8083/connectors content-type=application/json {{ "name": "{self.debezium_source.name}", @@ -113,7 +107,7 @@ def run(self, c: Composition, state: State) -> None: "publication.name": "dbz_publication_{self.debezium_source.name}", "publication.autocreate.mode": "filtered", "slot.name" : "slot_{self.postgres_table.name}", - "database.history.kafka.bootstrap.servers": "kafka:9092", + "database.history.kafka.bootstrap.servers": "redpanda:9092", "database.history.kafka.topic": "schema-changes.history", "truncate.handling.mode": "include", "decimal.handling.mode": "precise", @@ -134,7 +128,12 @@ def run(self, c: Composition, state: State) -> None: > CREATE TABLE {self.debezium_source.get_name_for_query()} FROM SOURCE {self.debezium_source.name} (REFERENCE "postgres.public.{self.postgres_table.name}") FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn ENVELOPE DEBEZIUM - """)) + """), + mz_service=state.mz_service, + ) def provides(self) -> list[Capability]: - return [self.debezium_source] if self.new_debezium_source else [] + if self.new_debezium_source: + assert self.debezium_source is not None + return [self.debezium_source] + return [] diff --git a/misc/python/materialize/zippy/framework.py b/misc/python/materialize/zippy/framework.py index 8ab253b4f5a9e..14344a837b115 100644 --- a/misc/python/materialize/zippy/framework.py +++ b/misc/python/materialize/zippy/framework.py @@ -7,7 +7,9 @@ # the Business Source License, use of this software will be governed # by the Apache License, Version 2.0. +import os import random +import threading from collections.abc import Sequence from datetime import datetime, timedelta from typing import TYPE_CHECKING, TypeVar @@ -19,6 +21,20 @@ from materialize.zippy.scenarios import Scenario +def ci_additional_system_parameter_defaults() -> dict[str, str]: + """Parse the CI_MZ_SYSTEM_PARAMETER_DEFAULT environment variable.""" + defaults = {} + system_parameter_default = os.getenv("CI_MZ_SYSTEM_PARAMETER_DEFAULT", "") + if system_parameter_default: + for val in system_parameter_default.split(";"): + x = val.split("=", maxsplit=1) + assert ( + len(x) == 2 + ), f"CI_MZ_SYSTEM_PARAMETER_DEFAULT '{val}' should be the format =" + defaults[x[0]] = x[1] + return defaults + + class State: mz_service: str deploy_generation: int @@ -28,8 +44,15 @@ def __init__(self): self.mz_service = "materialized" self.deploy_generation = 0 self.system_parameter_defaults = get_default_system_parameters() - self.iceberg_username: str | None = None - self.iceberg_key: str | None = None + # Every action that (re)starts Mz must pass these along, otherwise a + # feature flag under test silently reverts to its builtin default. + self.additional_system_parameter_defaults = ( + ci_additional_system_parameter_defaults() + ) + # Threads spawned by actions (e.g. parallel Kafka ingestion). They are + # joined at the end of the test and any errors they collected fail it. + self.background_threads: list[threading.Thread] = [] + self.background_errors: list[Exception] = [] class Capability: @@ -101,8 +124,10 @@ def get_free_capability_name( ] existing_object_names = self.get_capability_names(capability) remaining_object_names = set(all_object_names) - set(existing_object_names) + # sorted() so that the same --seed picks the same names regardless of + # set iteration order (which depends on PYTHONHASHSEED). return ( - random.choice(list(remaining_object_names)) + random.choice(sorted(remaining_object_names)) if len(remaining_object_names) > 0 else None ) @@ -191,6 +216,10 @@ def __init__( self._actions: list[Action] = [] self._final_actions: list[Action] = [] self._capabilities = Capabilities() + # The exact Capability instances each action added at generation time. + # Trimming in run() removes by identity, and provides() may build new + # instances on each call, so the originals must be remembered here. + self._provided_capabilities: dict[Action, list[Capability]] = {} self._actions_with_weight: dict[ActionOrFactory, float] = ( self._scenario.actions_with_weight() ) @@ -215,11 +244,10 @@ def generate_actions(self, action_def: ActionOrFactory) -> list[Action]: ) for action in actions: - print("test:", action) - self._capabilities._extend(action.provides()) - print(" - ", self._capabilities, action.provides()) + provided = action.provides() + self._provided_capabilities[action] = provided + self._capabilities._extend(provided) self._capabilities._remove(action.withholds()) - print(" - ", self._capabilities, action.withholds()) return actions @@ -237,10 +265,19 @@ def run(self, c: Composition) -> None: executed_count = i + 1 break + # Surface failures from background threads instead of dropping them. + for thread in self._state.background_threads: + thread.join() + if self._state.background_errors: + raise self._state.background_errors[0] + # Remove capability effects of actions that were never executed, # so that finalization only validates objects that actually exist. + # Capabilities withheld by unexecuted actions are not restored. That + # is fine because only the *IsRunning capabilities are ever withheld + # and finalization unconditionally starts those services again. for action in self._actions[executed_count:]: - for cap in action.provides(): + for cap in self._provided_capabilities[action]: self._capabilities.remove_capability_instance(cap) # Generate finalization actions now, after the main loop, so that diff --git a/misc/python/materialize/zippy/iceberg_actions.py b/misc/python/materialize/zippy/iceberg_actions.py index 5fd70f96f780d..e8f89aeed34a4 100644 --- a/misc/python/materialize/zippy/iceberg_actions.py +++ b/misc/python/materialize/zippy/iceberg_actions.py @@ -45,8 +45,6 @@ def run(self, c: Composition, state: State) -> None: Service("polaris", idle=True), ) username, key = setup_polaris_for_iceberg(c) - state.iceberg_username = username - state.iceberg_key = key c.testdrive( dedent(f""" diff --git a/misc/python/materialize/zippy/kafka_actions.py b/misc/python/materialize/zippy/kafka_actions.py index e9cafd4bba471..743c22af6a99c 100644 --- a/misc/python/materialize/zippy/kafka_actions.py +++ b/misc/python/materialize/zippy/kafka_actions.py @@ -12,8 +12,6 @@ import threading from textwrap import dedent -import numpy as np - from materialize.mzcompose.composition import Composition from materialize.zippy.framework import ( Action, @@ -55,20 +53,6 @@ def run(self, c: Composition, state: State) -> None: c.up("redpanda") -class KafkaStop(Action): - """Stop the Kafka instance.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {KafkaRunning} - - def withholds(self) -> set[type[Capability]]: - return {KafkaRunning} - - def run(self, c: Composition, state: State) -> None: - c.kill("redpanda") - - class CreateTopicParameterized(ActionFactory): """Creates a Kafka topic and decides on the envelope that will be used.""" @@ -139,8 +123,10 @@ def requires(cls) -> set[type[Capability]]: def __init__(self, capabilities: Capabilities) -> None: self.topic = random.choice(capabilities.get(TopicExists)) self.delta = random.randint(1, 10000) - # This gives 67% pads of up to 10 bytes, 25% of up to 100 bytes and outliers up to 256 bytes - self.pad = min(np.random.zipf(1.6, 1)[0], 256) * random.choice( + # Heavy-tailed pad sizes: mostly up to 10 bytes, some up to 100 bytes + # and outliers up to 256 bytes. int(paretovariate(0.6)) approximates a + # zipf(1.6) sample while staying reproducible under random.seed(). + self.pad = min(int(random.paretovariate(0.6)), 256) * random.choice( string.ascii_letters ) super().__init__(capabilities) @@ -167,7 +153,17 @@ def run(self, c: Composition, state: State) -> None: """) if self.parallel(): - threading.Thread(target=c.testdrive, args=[testdrive_str]).start() + mz_service = state.mz_service + + def ingest() -> None: + try: + c.testdrive(testdrive_str, mz_service=mz_service) + except Exception as e: + state.background_errors.append(e) + + thread = threading.Thread(target=ingest) + thread.start() + state.background_threads.append(thread) else: c.testdrive(testdrive_str, mz_service=state.mz_service) diff --git a/misc/python/materialize/zippy/mysql_actions.py b/misc/python/materialize/zippy/mysql_actions.py index 9d343b4c776a6..706618c78d590 100644 --- a/misc/python/materialize/zippy/mysql_actions.py +++ b/misc/python/materialize/zippy/mysql_actions.py @@ -40,20 +40,6 @@ def run(self, c: Composition, state: State) -> None: ) -class MySqlStop(Action): - """Stop the MySQL instance.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {MySqlRunning} - - def withholds(self) -> set[type[Capability]]: - return {MySqlRunning} - - def run(self, c: Composition, state: State) -> None: - c.kill("mysql") - - class MySqlRestart(Action): """Restart the MySql instance.""" @@ -80,8 +66,7 @@ def __init__(self, capabilities: Capabilities) -> None: if len(existing_mysql_tables) == 0: self.new_mysql_table = True - # A PK is now required for Debezium - this_mysql_table.has_pk = True + this_mysql_table.has_pk = random.choice([True, False]) self.mysql_table = this_mysql_table elif len(existing_mysql_tables) == 1: diff --git a/misc/python/materialize/zippy/mz_actions.py b/misc/python/materialize/zippy/mz_actions.py index 03389996dab7d..4a76858f1a830 100644 --- a/misc/python/materialize/zippy/mz_actions.py +++ b/misc/python/materialize/zippy/mz_actions.py @@ -8,54 +8,27 @@ # by the Apache License, Version 2.0. -import os - from materialize.mzcompose.composition import Composition from materialize.mzcompose.services.materialized import ( LEADER_STATUS_HEALTHCHECK, DeploymentStatus, Materialized, ) +from materialize.zippy.balancerd_actions import restart_balancerd from materialize.zippy.balancerd_capabilities import BalancerdIsRunning from materialize.zippy.blob_store_capabilities import BlobStoreIsRunning from materialize.zippy.crdb_capabilities import CockroachIsRunning from materialize.zippy.framework import ( Action, - ActionFactory, - Capabilities, Capability, Mz0dtDeployBaseAction, State, ) from materialize.zippy.mz_capabilities import MzIsRunning +from materialize.zippy.table_capabilities import TableExists from materialize.zippy.view_capabilities import ViewExists -class MzStartParameterized(ActionFactory): - """Starts a Mz instance with custom paramters.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {CockroachIsRunning, BlobStoreIsRunning} - - @classmethod - def incompatible_with(cls) -> set[type[Capability]]: - return {MzIsRunning} - - def __init__( - self, additional_system_parameter_defaults: dict[str, str] = {} - ) -> None: - self.additional_system_parameter_defaults = additional_system_parameter_defaults - - def new(self, capabilities: Capabilities) -> list[Action]: - return [ - MzStart( - capabilities=capabilities, - additional_system_parameter_defaults=self.additional_system_parameter_defaults, - ) - ] - - class MzStart(Action): """Starts a Mz instance (all components are running in the same container).""" @@ -67,31 +40,9 @@ def requires(cls) -> set[type[Capability]]: def incompatible_with(cls) -> set[type[Capability]]: return {MzIsRunning} - def __init__( - self, - capabilities: Capabilities, - additional_system_parameter_defaults: dict[str, str] = {}, - ) -> None: - if additional_system_parameter_defaults: - self.additional_system_parameter_defaults = ( - additional_system_parameter_defaults - ) - else: - self.additional_system_parameter_defaults = {} - system_parameter_default = os.getenv("CI_MZ_SYSTEM_PARAMETER_DEFAULT", "") - if system_parameter_default: - for val in system_parameter_default.split(";"): - x = val.split("=", maxsplit=1) - assert ( - len(x) == 2 - ), f"CI_MZ_SYSTEM_PARAMETER_DEFAULT '{val}' should be the format =" - self.additional_system_parameter_defaults[x[0]] = x[1] - - super().__init__(capabilities) - def run(self, c: Composition, state: State) -> None: print( - f"Starting Mz with additional_system_parameter_defaults = {self.additional_system_parameter_defaults}" + f"Starting Mz with additional_system_parameter_defaults = {state.additional_system_parameter_defaults}" ) with c.override( @@ -104,7 +55,7 @@ def run(self, c: Composition, state: State) -> None: system_parameter_defaults=state.system_parameter_defaults, sanity_restart=False, restart="on-failure", - additional_system_parameter_defaults=self.additional_system_parameter_defaults, + additional_system_parameter_defaults=state.additional_system_parameter_defaults, metadata_store="cockroach", default_replication_factor=2, ) @@ -183,6 +134,7 @@ def run(self, c: Composition, state: State) -> None: system_parameter_defaults=state.system_parameter_defaults, sanity_restart=False, restart="on-failure", + additional_system_parameter_defaults=state.additional_system_parameter_defaults, metadata_store="cockroach", default_replication_factor=2, ) @@ -218,6 +170,7 @@ def run(self, c: Composition, state: State) -> None: sanity_restart=False, restart="on-failure", healthcheck=LEADER_STATUS_HEALTHCHECK, + additional_system_parameter_defaults=state.additional_system_parameter_defaults, metadata_store="cockroach", default_replication_factor=2, ), @@ -237,13 +190,20 @@ def run(self, c: Composition, state: State) -> None: wait=True, ) + # Balancerd's resolver is fixed at startup and still points at the + # previous generation. Re-point it at the new leader. + if c.is_running("balancerd"): + restart_balancerd(c, state) + class KillClusterd(Action): """Kills the clusterd processes in the environmentd container. The process orchestrator will restart them.""" @classmethod - def requires(cls) -> set[type[Capability]]: - return {MzIsRunning, ViewExists} + def requires(cls) -> list[set[type[Capability]]]: + # Only kill once a dataflow-bearing object exists, so the kill has + # something to disrupt. + return [{MzIsRunning, ViewExists}, {MzIsRunning, TableExists}] def run(self, c: Composition, state: State) -> None: # Depending on the workload, clusterd may not be running, hence the || true diff --git a/misc/python/materialize/zippy/postgres_actions.py b/misc/python/materialize/zippy/postgres_actions.py index 512335cb5969c..c30454cee6fc2 100644 --- a/misc/python/materialize/zippy/postgres_actions.py +++ b/misc/python/materialize/zippy/postgres_actions.py @@ -27,20 +27,6 @@ def run(self, c: Composition, state: State) -> None: c.up("postgres") -class PostgresStop(Action): - """Stop the Postgres instance.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {PostgresRunning} - - def withholds(self) -> set[type[Capability]]: - return {PostgresRunning} - - def run(self, c: Composition, state: State) -> None: - c.kill("postgres") - - class PostgresRestart(Action): """Restart the Postgres instance.""" @@ -69,8 +55,7 @@ def __init__(self, capabilities: Capabilities) -> None: if len(existing_postgres_tables) == 0: self.new_postgres_table = True - # A PK is now required for Debezium - this_postgres_table.has_pk = True + this_postgres_table.has_pk = random.choice([True, False]) self.postgres_table = this_postgres_table elif len(existing_postgres_tables) == 1: diff --git a/misc/python/materialize/zippy/scenarios.py b/misc/python/materialize/zippy/scenarios.py index 2169b06d0d82e..2351b43120035 100644 --- a/misc/python/materialize/zippy/scenarios.py +++ b/misc/python/materialize/zippy/scenarios.py @@ -75,21 +75,36 @@ StoragedStart, ) from materialize.zippy.copy_s3_actions import CopyFromS3, CopyToS3 -from materialize.zippy.table_actions import DML, CreateTableParameterized, ValidateTable -from materialize.zippy.view_actions import CreateViewParameterized, ValidateView +from materialize.zippy.table_actions import ( + DML, + CreateTableParameterized, + DropTable, + ValidateTable, +) +from materialize.zippy.view_actions import ( + CreateViewParameterized, + DropView, + ValidateView, +) class Scenario: def bootstrap(self) -> list[ActionOrFactory]: - return [ + bootstrap: list[ActionOrFactory] = [ KafkaStart, CockroachStart, BlobStoreStart, MzStart, StoragedStart, BalancerdStart, - IcebergStart, ] + # Polaris is only needed if the scenario can create Iceberg sinks. + if any( + isinstance(action, CreateIcebergSinkParameterized) + for action in self.actions_with_weight() + ): + bootstrap.append(IcebergStart) + return bootstrap def actions_with_weight(self) -> dict[ActionOrFactory, float]: raise RuntimeError @@ -120,6 +135,7 @@ def actions_with_weight(self) -> dict[ActionOrFactory, float]: CreateTopicParameterized(): 5, CreateSourceParameterized(): 5, CreateViewParameterized(max_inputs=2): 5, + DropView: 5, CreateSinkParameterized(): 5, CreateIcebergSinkParameterized(): 5, ValidateView: 10, @@ -163,12 +179,16 @@ def actions_with_weight(self) -> dict[ActionOrFactory, float]: Mz0dtDeploy: 10, BalancerdStop: 1, BalancerdRestart: 1, - BackupAndRestore: 1, + # No mid-test BackupAndRestore since the state of the sinks is not + # recorded across a backup&restore cycle, see + # https://github.com/MaterializeInc/database-issues/issues/9589 KillClusterd: 10, # Disabled because a separate clusterd is not supported by Mz0dtDeploy yet # StoragedRestart: 5, CreateTableParameterized(): 10, CreateViewParameterized(): 10, + DropTable: 5, + DropView: 5, CreateSinkParameterized(): 10, CreateIcebergSinkParameterized(): 5, ValidateTable: 20, diff --git a/misc/python/materialize/zippy/sql_server_actions.py b/misc/python/materialize/zippy/sql_server_actions.py index 046a607e38b61..1b0952c854780 100644 --- a/misc/python/materialize/zippy/sql_server_actions.py +++ b/misc/python/materialize/zippy/sql_server_actions.py @@ -45,20 +45,6 @@ def run(self, c: Composition, state: State) -> None: ) -class SqlServerStop(Action): - """Stop the SQL Server instance.""" - - @classmethod - def requires(cls) -> set[type[Capability]]: - return {SqlServerRunning} - - def withholds(self) -> set[type[Capability]]: - return {SqlServerRunning} - - def run(self, c: Composition, state: State) -> None: - c.kill("sql-server") - - class SqlServerRestart(Action): """Restart the SqlServer instance.""" @@ -87,8 +73,7 @@ def __init__(self, capabilities: Capabilities) -> None: if len(existing_sql_server_tables) == 0: self.new_sql_server_table = True - # A PK is now required for Debezium - this_sql_server_table.has_pk = True + this_sql_server_table.has_pk = random.choice([True, False]) self.sql_server_table = this_sql_server_table elif len(existing_sql_server_tables) == 1: diff --git a/misc/python/materialize/zippy/table_actions.py b/misc/python/materialize/zippy/table_actions.py index 5316a3a1901e5..e88efe9d95f28 100644 --- a/misc/python/materialize/zippy/table_actions.py +++ b/misc/python/materialize/zippy/table_actions.py @@ -21,6 +21,7 @@ ) from materialize.zippy.mz_capabilities import MzIsRunning from materialize.zippy.table_capabilities import TableExists +from materialize.zippy.view_capabilities import ViewExists MAX_ROWS_PER_ACTION = 10000 @@ -131,6 +132,39 @@ def run(self, c: Composition, state: State) -> None: ) +class DropTable(Action): + """Drops a table that no view reads from.""" + + @classmethod + def requires(cls) -> set[type[Capability]]: + return {BalancerdIsRunning, MzIsRunning, TableExists} + + def __init__(self, capabilities: Capabilities) -> None: + referenced: set[str] = set() + for view in capabilities.get(ViewExists): + referenced.update(input.name for input in view.inputs) + + candidates = [ + t for t in capabilities.get(TableExists) if t.name not in referenced + ] + self.table: TableExists | None = ( + random.choice(candidates) if candidates else None + ) + if self.table is not None: + capabilities.remove_capability_instance(self.table) + super().__init__(capabilities) + + def __str__(self) -> str: + return f"{Action.__str__(self)} {self.table.name if self.table else ''}" + + def run(self, c: Composition, state: State) -> None: + if self.table is not None: + c.testdrive( + f"> DROP TABLE {self.table.name};", + mz_service=state.mz_service, + ) + + class DML(Action): """Performs an INSERT, DELETE or UPDATE against a table.""" diff --git a/misc/python/materialize/zippy/view_actions.py b/misc/python/materialize/zippy/view_actions.py index 475546c482457..71608044d50b2 100644 --- a/misc/python/materialize/zippy/view_actions.py +++ b/misc/python/materialize/zippy/view_actions.py @@ -20,9 +20,11 @@ Capability, State, ) +from materialize.zippy.iceberg_capabilities import IcebergSinkExists from materialize.zippy.mysql_cdc_capabilities import MySqlCdcTableExists from materialize.zippy.mz_capabilities import MzIsRunning from materialize.zippy.pg_cdc_capabilities import PostgresCdcTableExists +from materialize.zippy.sink_capabilities import SinkExists from materialize.zippy.source_capabilities import SourceExists from materialize.zippy.storaged_capabilities import StoragedRunning from materialize.zippy.table_capabilities import TableExists @@ -137,6 +139,44 @@ def provides(self) -> list[Capability]: return [self.view] +class DropView(Action): + """Drops a view that no sink and no other view depends on.""" + + @classmethod + def requires(cls) -> set[type[Capability]]: + return {BalancerdIsRunning, MzIsRunning, ViewExists} + + def __init__(self, capabilities: Capabilities) -> None: + referenced: set[str] = set() + for sink in capabilities.get(SinkExists): + referenced.add(sink.source_view.name) + referenced.add(sink.dest_view.name) + for iceberg_sink in capabilities.get(IcebergSinkExists): + referenced.add(iceberg_sink.source_view.name) + for view in capabilities.get(ViewExists): + referenced.update( + input.name for input in view.inputs if isinstance(input, ViewExists) + ) + + candidates = [ + v for v in capabilities.get(ViewExists) if v.name not in referenced + ] + self.view: ViewExists | None = random.choice(candidates) if candidates else None + if self.view is not None: + capabilities.remove_capability_instance(self.view) + super().__init__(capabilities) + + def __str__(self) -> str: + return f"{Action.__str__(self)} {self.view.name if self.view else ''}" + + def run(self, c: Composition, state: State) -> None: + if self.view is not None: + c.testdrive( + f"> DROP MATERIALIZED VIEW {self.view.name};", + mz_service=state.mz_service, + ) + + class ValidateView(Action): """Validates a view.""" diff --git a/src/adapter-types/src/cluster_state.rs b/src/adapter-types/src/cluster_state.rs index 143f7eaee175b..f8639e7537905 100644 --- a/src/adapter-types/src/cluster_state.rs +++ b/src/adapter-types/src/cluster_state.rs @@ -63,6 +63,7 @@ pub struct ReplicaShape { pub size: String, pub availability_zones: AvailabilityZones, pub logging: ComputeReplicaLogging, + pub arrangement_compression: bool, } impl ReplicaShape { @@ -73,6 +74,7 @@ impl ReplicaShape { pub fn matches(&self, other: &ReplicaShape) -> bool { self.size == other.size && self.logging == other.logging + && self.arrangement_compression == other.arrangement_compression && self.availability_zones.pool() == other.availability_zones.pool() } } @@ -86,6 +88,7 @@ pub struct ExpectedClusterState { pub replication_factor: u32, pub availability_zones: AvailabilityZones, pub logging: ComputeReplicaLogging, + pub arrangement_compression: bool, /// The autoscaling policy. Part of the witness because it determines whether, /// and at what size, a burst is warranted. pub auto_scaling_policy: Option, @@ -191,6 +194,7 @@ pub struct ReconfigurationTarget { pub replication_factor: u32, pub availability_zones: AvailabilityZones, pub logging: ComputeReplicaLogging, + pub arrangement_compression: bool, } impl ReconfigurationTarget { @@ -200,6 +204,7 @@ impl ReconfigurationTarget { size: self.size.clone(), availability_zones: self.availability_zones.clone(), logging: self.logging.clone(), + arrangement_compression: self.arrangement_compression, } } } @@ -262,6 +267,7 @@ mod tests { size: "small".to_string(), availability_zones: azs(zones), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, } } diff --git a/src/adapter-types/src/dyncfgs.rs b/src/adapter-types/src/dyncfgs.rs index f8aa62ef8190d..2a370901583f8 100644 --- a/src/adapter-types/src/dyncfgs.rs +++ b/src/adapter-types/src/dyncfgs.rs @@ -284,6 +284,15 @@ pub const USER_ID_POOL_BATCH_SIZE: Config = Config::new( "Number of user IDs to pre-allocate in a batch for DDL operations.", ); +/// Maximum number of txns-shard write attempts before rebuilding `environmentd`. +/// +/// The effective minimum is one attempt. +pub const GROUP_COMMIT_MAX_ATTEMPTS: Config = Config::new( + "group_commit_max_attempts", + 100, + "Maximum number of txns-shard write attempts before rebuilding environmentd. Values below 1 are treated as 1.", +); + /// OIDC client ID for the web console. pub const CONSOLE_OIDC_CLIENT_ID: Config<&'static str> = Config::new( "console_oidc_client_id", @@ -457,6 +466,7 @@ pub fn all_dyncfgs(configs: ConfigSet) -> ConfigSet { .add(&MCP_REQUEST_TIMEOUT) .add(&WEBHOOK_MAX_REQUEST_SIZE_BYTES) .add(&USER_ID_POOL_BATCH_SIZE) + .add(&GROUP_COMMIT_MAX_ATTEMPTS) .add(&CONSOLE_OIDC_CLIENT_ID) .add(&CONSOLE_OIDC_SCOPES) .add(&ARRANGEMENT_SIZE_HISTORY_COLLECTION_INTERVAL) diff --git a/src/adapter/src/catalog.rs b/src/adapter/src/catalog.rs index 9f10f48d1db12..8b3a1f919da38 100644 --- a/src/adapter/src/catalog.rs +++ b/src/adapter/src/catalog.rs @@ -156,6 +156,22 @@ pub struct Catalog { shared_transient_revision: Arc, } +/// A handle for advancing the durable catalog upper off the coordinator loop. +#[derive(Debug, Clone)] +pub struct CatalogUpperHandle { + storage: Arc>>, +} + +impl CatalogUpperHandle { + /// Advances the durable catalog upper to at least `new_upper`. + pub async fn advance_upper( + &self, + new_upper: mz_repr::Timestamp, + ) -> Result<(), mz_catalog::durable::CatalogError> { + self.storage.lock().await.advance_upper(new_upper).await + } +} + // Implement our own Clone because derive can't unless S is Clone, which it's // not (hence the Arc). impl Clone for Catalog { @@ -602,16 +618,18 @@ impl Catalog { self.storage().await.current_upper().await } + /// Allocates and returns both a user [`CatalogItemId`] and [`GlobalId`], delegating to + /// [`DurableCatalogState::allocate_user_id`]. pub async fn allocate_user_id( &self, commit_ts: mz_repr::Timestamp, ) -> Result<(CatalogItemId, GlobalId), Error> { - self.storage() + Ok(self + .storage() .await .allocate_user_id(commit_ts) .await - .maybe_terminate("allocating user ids") - .err_into() + .maybe_terminate("allocating user ids")?) } /// Allocate `amount` many user IDs. See [`DurableCatalogState::allocate_user_ids`]. @@ -620,12 +638,12 @@ impl Catalog { amount: u64, commit_ts: mz_repr::Timestamp, ) -> Result, Error> { - self.storage() + Ok(self + .storage() .await .allocate_user_ids(amount, commit_ts) .await - .maybe_terminate("allocating user ids") - .err_into() + .maybe_terminate("allocating user ids")?) } pub async fn allocate_user_id_for_test(&self) -> Result<(CatalogItemId, GlobalId), Error> { @@ -692,16 +710,18 @@ impl Catalog { .err_into() } + /// Allocates and returns a user [`ClusterId`], delegating to + /// [`DurableCatalogState::allocate_user_cluster_id`]. pub async fn allocate_user_cluster_id( &self, commit_ts: mz_repr::Timestamp, ) -> Result { - self.storage() + Ok(self + .storage() .await .allocate_user_cluster_id(commit_ts) .await - .maybe_terminate("allocating user cluster ids") - .err_into() + .maybe_terminate("allocating user cluster ids")?) } /// Allocate `amount` many user replica IDs. See @@ -711,12 +731,12 @@ impl Catalog { amount: u64, commit_ts: mz_repr::Timestamp, ) -> Result, Error> { - self.storage() + Ok(self + .storage() .await .allocate_user_replica_ids(amount, commit_ts) .await - .maybe_terminate("allocating user replica ids") - .err_into() + .maybe_terminate("allocating user replica ids")?) } /// Allocate `amount` many system replica IDs. See @@ -726,12 +746,12 @@ impl Catalog { amount: u64, commit_ts: mz_repr::Timestamp, ) -> Result, Error> { - self.storage() + Ok(self + .storage() .await .allocate_system_replica_ids(amount, commit_ts) .await - .maybe_terminate("allocating system replica ids") - .err_into() + .maybe_terminate("allocating system replica ids")?) } /// Allocate `amount` many replica IDs for `cluster_id`, picking user or @@ -1148,11 +1168,23 @@ impl Catalog { } } + /// Advances the catalog upper to at least `new_upper`. + /// + /// Empty progress can overtake `new_upper`. A durable upper mismatch with content returns + /// `CatalogOutOfSync`. See [`mz_catalog::durable::DurableCatalogState::advance_upper`] for + /// fencing semantics. #[mz_ore::instrument(level = "debug")] pub async fn advance_upper(&self, new_upper: mz_repr::Timestamp) -> Result<(), AdapterError> { Ok(self.storage().await.advance_upper(new_upper).await?) } + /// Returns a durable-upper handle that shares the catalog storage mutex. + pub fn upper_handle(&self) -> CatalogUpperHandle { + CatalogUpperHandle { + storage: Arc::clone(&self.storage), + } + } + /// Return the ids of all log sources the given object depends on. pub fn introspection_dependencies(&self, id: CatalogItemId) -> Vec { self.state.introspection_dependencies(id) diff --git a/src/adapter/src/catalog/apply.rs b/src/adapter/src/catalog/apply.rs index 51883acbd795a..cd1a23f721ae6 100644 --- a/src/adapter/src/catalog/apply.rs +++ b/src/adapter/src/catalog/apply.rs @@ -767,7 +767,10 @@ impl CatalogState { }; let config = ReplicaConfig { location, - compute: ComputeReplicaConfig { logging }, + compute: ComputeReplicaConfig { + logging, + arrangement_compression: cluster_replica.config.arrangement_compression, + }, }; let mem_cluster_replica = ClusterReplica { name: cluster_replica.name.clone(), diff --git a/src/adapter/src/catalog/cluster_state.rs b/src/adapter/src/catalog/cluster_state.rs index bac1aefd23fb5..db9f6bbdb087d 100644 --- a/src/adapter/src/catalog/cluster_state.rs +++ b/src/adapter/src/catalog/cluster_state.rs @@ -36,6 +36,7 @@ pub(crate) fn project_expected(managed: &ClusterVariantManaged) -> ExpectedClust size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: _, schedule: _, @@ -48,6 +49,7 @@ pub(crate) fn project_expected(managed: &ClusterVariantManaged) -> ExpectedClust replication_factor: *replication_factor, availability_zones: AvailabilityZones(availability_zones.clone()), logging: logging.clone(), + arrangement_compression: *arrangement_compression, auto_scaling_policy: auto_scaling_strategy.as_ref().map(auto_scaling_policy), reconfiguration: reconfiguration.as_ref().map(reconfiguration_record), burst: burst.as_ref().map(burst_record), @@ -87,6 +89,7 @@ fn reconfiguration_record(record: &ReconfigurationState) -> ReconfigurationRecor replication_factor, availability_zones, logging, + arrangement_compression, } = target; ReconfigurationRecord { target: ReconfigurationTarget { @@ -94,6 +97,7 @@ fn reconfiguration_record(record: &ReconfigurationState) -> ReconfigurationRecor replication_factor: *replication_factor, availability_zones: AvailabilityZones(availability_zones.clone()), logging: logging.clone(), + arrangement_compression: *arrangement_compression, }, deadline: *deadline, on_timeout: on_timeout(*on_timeout_action), diff --git a/src/adapter/src/catalog/open.rs b/src/adapter/src/catalog/open.rs index 486f24e5be073..693515ccca026 100644 --- a/src/adapter/src/catalog/open.rs +++ b/src/adapter/src/catalog/open.rs @@ -997,6 +997,7 @@ fn add_new_remove_old_builtin_clusters_migration( availability_zones: vec![], replication_factor: cluster_config.replication_factor, logging: default_logging_config(), + arrangement_compression: false, optimizer_feature_overrides: Default::default(), schedule: Default::default(), auto_scaling_strategy: None, @@ -1349,6 +1350,7 @@ pub(crate) fn builtin_cluster_replica_config( size: replica_size, }, logging: default_logging_config(), + arrangement_compression: false, } } diff --git a/src/adapter/src/catalog/transact.rs b/src/adapter/src/catalog/transact.rs index f2bc7fabfad6e..0d158b5eb3c4e 100644 --- a/src/adapter/src/catalog/transact.rs +++ b/src/adapter/src/catalog/transact.rs @@ -33,7 +33,7 @@ use mz_audit_log::{ }; use mz_catalog::SYSTEM_CONN_ID; use mz_catalog::builtin::BuiltinLog; -use mz_catalog::durable::{NetworkPolicy, Snapshot, Transaction}; +use mz_catalog::durable::{DryRunTransaction, NetworkPolicy, Snapshot, Transaction}; use mz_catalog::expr_cache::LocalExpressions; use mz_catalog::memory::error::{AmbiguousRename, Error, ErrorKind}; use mz_catalog::memory::objects::{ @@ -559,6 +559,10 @@ impl Catalog { replication_factor, availability_zones, logging, + // The append-only audit payload records the target shape's size, + // replication factor, availability zones, and logging. Arrangement + // compression is intentionally not part of it. + arrangement_compression: _, } = target; Ok(AlterClusterReconfigurationV1 { cluster_id: cluster_id.to_string(), @@ -711,11 +715,13 @@ impl Catalog { .transaction() .await .unwrap_or_terminate("starting catalog transaction"); + // Empty progress may have overtaken the timestamp chosen before opening the transaction. + let commit_ts = std::cmp::max(oracle_write_ts, tx.upper()); let new_state = Self::transact_inner( TransactInnerMode::Commit, storage_collections, - oracle_write_ts, + commit_ts, session, ops, temporary_ids, @@ -731,7 +737,7 @@ impl Catalog { // process if this fails, because we have to restart envd due to // indeterminate catalog state, which we only reconcile during catalog // init. - tx.commit(oracle_write_ts) + tx.commit(commit_ts) .await .unwrap_or_terminate("catalog storage transaction commit must succeed"); @@ -796,10 +802,11 @@ impl Catalog { } else { // First statement: fresh transaction from durable storage, which // is in sync with the real catalog state. - storage + let tx = storage .transaction() .await - .unwrap_or_terminate("starting catalog transaction") + .unwrap_or_terminate("starting catalog transaction"); + DryRunTransaction::new(tx) }; // Process only the new ops against the accumulated state in dry-run mode. @@ -813,7 +820,7 @@ impl Catalog { &mut builtin_table_updates, &mut catalog_updates, &mut audit_events, - &mut tx, + tx.transaction_mut(), base_state, ) .await?; @@ -3639,6 +3646,7 @@ mod tests { size: "small".into(), availability_zones: Vec::new(), logging: logging.clone(), + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: OptimizerFeatureOverrides::default(), schedule: Default::default(), @@ -3657,6 +3665,7 @@ mod tests { log_logging: true, interval: Some(Duration::from_secs(5)), }, + arrangement_compression: false, }, deadline: Timestamp::from(400u64), on_timeout: mz_sql::plan::OnTimeoutAction::Rollback, @@ -3739,6 +3748,7 @@ mod tests { log_logging: false, interval: None, }, + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: OptimizerFeatureOverrides::default(), schedule: Default::default(), @@ -3761,6 +3771,7 @@ mod tests { log_logging: false, interval: Some(Duration::from_secs(1)), }, + arrangement_compression: false, }, deadline: Timestamp::from(400u64), on_timeout: mz_sql::plan::OnTimeoutAction::Rollback, @@ -3820,6 +3831,7 @@ mod tests { log_logging: false, interval: None, }, + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: OptimizerFeatureOverrides::default(), schedule: Default::default(), @@ -3891,6 +3903,7 @@ mod tests { log_logging: false, interval: None, }, + arrangement_compression: false, replication_factor, optimizer_feature_overrides: OptimizerFeatureOverrides::default(), schedule: Default::default(), @@ -3953,6 +3966,7 @@ mod tests { log_logging: false, interval: None, }, + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: OptimizerFeatureOverrides::default(), schedule: Default::default(), diff --git a/src/adapter/src/coord.rs b/src/adapter/src/coord.rs index d66ae67c1af56..29ada71ba3e6d 100644 --- a/src/adapter/src/coord.rs +++ b/src/adapter/src/coord.rs @@ -354,6 +354,17 @@ pub enum Message { }, /// Initiates a group commit. GroupCommitInitiate(Span, Option), + /// Finalizes an applied group commit. + /// + /// Statement timestamps precede response retirement because retirement ends statement logging. + GroupCommitApplied { + /// Responses to retire after recording statement timestamps. + responses: Vec, + /// Statement executions associated with this commit. + statement_logging_ids: Vec, + /// The applied write timestamp. + write_ts: Timestamp, + }, DeferredStatementReady, AdvanceTimelines, ClusterEvent(ClusterEvent), @@ -513,6 +524,7 @@ impl Message { Message::CreateConnectionValidationReady(_) => "create_connection_validation_ready", Message::TryDeferred { .. } => "try_deferred", Message::GroupCommitInitiate(..) => "group_commit_initiate", + Message::GroupCommitApplied { .. } => "group_commit_applied", Message::AdvanceTimelines => "advance_timelines", Message::ClusterEvent(_) => "cluster_event", Message::CancelPendingPeeks { .. } => "cancel_pending_peeks", @@ -1613,32 +1625,44 @@ impl Drop for ExecuteContextGuard { } } -/// Bundle of state related to statement execution. +/// Carries the session and statement state needed to retire an execution. /// -/// This struct collects a bundle of state that needs to be threaded -/// through various functions as part of statement execution. -/// It is used to finalize execution, by calling `retire`. Finalizing execution -/// involves sending the session back to the pgwire layer so that it -/// may be used to process further commands. It also involves -/// performing some work on the main coordinator thread -/// (e.g., recording the time at which the statement finished -/// executing). The state necessary to perform this work is bundled in -/// the `ExecuteContextGuard` object. +/// Dropping an unretired context fails the client synchronously. Shutdown can drop contexts from +/// task queues, where spawning response-barrier work is no longer safe. #[derive(Debug)] pub struct ExecuteContext { - inner: Box, + // `None` only after `retire`/`into_parts` consumed the context. + inner: Option>, } impl std::ops::Deref for ExecuteContext { type Target = ExecuteContextInner; fn deref(&self) -> &Self::Target { - &*self.inner + self.inner.as_ref().expect("only consumed by value") } } impl std::ops::DerefMut for ExecuteContext { fn deref_mut(&mut self) -> &mut Self::Target { - &mut *self.inner + self.inner.as_mut().expect("only consumed by value") + } +} + +impl Drop for ExecuteContext { + fn drop(&mut self) { + let Some(inner) = self.inner.take() else { + return; + }; + // Destructors cannot spawn response-barrier tasks during runtime shutdown. Send the error + // synchronously and let the statement guard report retirement. + tracing::warn!("execute context dropped without retirement, failing the client"); + let ExecuteContextInner { tx, session, .. } = *inner; + tx.send( + Err(AdapterError::Internal( + "statement execution abandoned, outcome unknown (server shutting down)".into(), + )), + session, + ); } } @@ -1687,14 +1711,16 @@ impl ExecuteContext { response_barriers: Vec, ) -> Self { Self { - inner: ExecuteContextInner { - tx, - session, - extra, - response_barriers, - internal_cmd_tx, - } - .into(), + inner: Some( + ExecuteContextInner { + tx, + session, + extra, + response_barriers, + internal_cmd_tx, + } + .into(), + ), } } @@ -1708,7 +1734,7 @@ impl ExecuteContext { /// eventual retirement. The returned response barriers must stay attached /// to the user-visible response path. pub fn into_parts( - self, + mut self, ) -> ( ClientTransmitter, mpsc::UnboundedSender, @@ -1722,20 +1748,20 @@ impl ExecuteContext { session, extra, response_barriers, - } = *self.inner; + } = *self.inner.take().expect("only consumed by value"); (tx, internal_cmd_tx, session, extra, response_barriers) } /// Retire the execution, by sending a message to the coordinator. #[instrument(level = "debug")] - pub fn retire(self, result: Result) { + pub fn retire(mut self, result: Result) { let ExecuteContextInner { tx, internal_cmd_tx, session, extra, response_barriers, - } = *self.inner; + } = *self.inner.take().expect("only consumed by value"); if response_barriers.is_empty() { retire_execution_context(tx, internal_cmd_tx, session, extra, result); } else { @@ -1985,6 +2011,7 @@ pub struct Coordinator { /// waiting out its tick interval. Notified after catalog transactions that /// change durable cluster state. reconcile_now: Arc, + group_committer_tx: mpsc::UnboundedSender, /// Channel for strict serializable reads ready to commit. strict_serializable_reads_tx: mpsc::UnboundedSender<(ConnectionId, PendingReadTxn)>, @@ -3102,14 +3129,10 @@ impl Coordinator { .unwrap_or_terminate("cannot fail to append"); info!("coordinator init: sending builtin table updates"); - let (_builtin_updates_fut, write_ts) = self - .builtin_table_update() - .execute(builtin_table_updates) - .await; - info!(?write_ts, "our write ts"); - if let Some(write_ts) = write_ts { - self.apply_local_write(write_ts).await; - } + let builtin_updates_fut = self.builtin_table_update().execute(builtin_table_updates); + // Wait for the committer to apply the write, so the builtin tables are readable before + // we start serving. The committer allocates the timestamp and advances the oracle. + builtin_updates_fut.await; } /// Initializes all storage collections required by catalog objects in the storage controller. @@ -3378,6 +3401,8 @@ impl Coordinator { }) .collect(); + let mut created_gids = Vec::new(); + while !pending.is_empty() { // Drain collections whose dependencies have all been registered already // (i.e., are not in `pending`). @@ -3423,6 +3448,8 @@ impl Coordinator { ready = mem::take(&mut pending).into_iter().collect(); } + created_gids.extend(ready.iter().map(|(gid, _collection)| *gid)); + self.controller .storage .create_collections_for_bootstrap( @@ -3435,6 +3462,13 @@ impl Coordinator { .unwrap_or_terminate("cannot fail to create collections"); } + // Register txn-wal tables before the later system-table snapshot. + self.controller + .storage + .register_table_collections(register_ts, created_gids) + .await + .unwrap_or_terminate("cannot fail to register tables"); + if !self.controller.read_only() { self.apply_local_write(register_ts).await; } @@ -3981,17 +4015,13 @@ impl Coordinator { // https://docs.rs/tokio/1.19.2/tokio/time/struct.Interval.html#cancel-safety // Receive a single command. _ = self.advance_timelines_interval.tick() => { - let span = info_span!(parent: None, "coord::advance_timelines_interval"); - span.follows_from(Span::current()); - - // Group commit sends an `AdvanceTimelines` message when - // done, which is what downgrades read holds. In - // read-only mode we send this message directly because - // we're not doing group commits. + // Writable keepalives use the committer to advance tables and read holds. + // Its permit coalesces ticks behind a slow oracle. Read-only mode advances + // timelines directly. if self.controller.read_only() { messages.push(Message::AdvanceTimelines); } else { - messages.push(Message::GroupCommitInitiate(span, None)); + self.group_commit_tx.notify(); } }, // Re-check pending strict serializable reads. Deliberately @@ -5047,12 +5077,14 @@ pub fn serve( let catalog = Arc::new(catalog); let caching_secrets_reader = CachingSecretsReader::new(secrets_controller.reader()); + let (group_committer_tx, group_committer_rx) = mpsc::unbounded_channel(); let mut coord = Coordinator { controller, catalog, internal_cmd_tx, group_commit_tx, reconcile_now: Arc::new(Notify::new()), + group_committer_tx, strict_serializable_reads_tx, linearize_reads_notify: Arc::new(Notify::new()), global_timelines: timestamp_oracles, @@ -5099,6 +5131,21 @@ pub fn serve( user_id_pool: IdPool::empty(), persist_client, }; + + // Read-only promotion restarts the process and creates a fresh committer. + handle.block_on(async { + appends::spawn_group_committer( + group_committer_rx, + coord.get_local_timestamp_oracle(), + coord.controller.storage.table_write_handle(), + coord.catalog().upper_handle(), + coord.internal_cmd_tx.clone(), + coord.catalog().config().now.clone(), + coord.metrics.clone(), + coord.catalog().system_config().dyncfgs(), + ); + }); + let bootstrap = handle.block_on(async { coord .bootstrap( diff --git a/src/adapter/src/coord/appends.rs b/src/adapter/src/coord/appends.rs index c6fcd5e94043f..a0c482c179938 100644 --- a/src/adapter/src/coord/appends.rs +++ b/src/adapter/src/coord/appends.rs @@ -8,9 +8,33 @@ // by the Apache License, Version 2.0. //! Logic and types for all appends executed by the [`Coordinator`]. +//! +//! Runtime table appends, registrations, and forgets are serialized by the +//! [`GroupCommitter`]. FIFO order is required so appends cannot overtake registration or +//! forgetting. +//! +//! For each command, the committer: +//! +//! 1. allocates a write timestamp from the shared oracle, +//! 2. advances the catalog upper to [`WriteTimestamp::advance_to`], +//! 3. writes the txns shard, retrying `InvalidUppers` from step 1, and +//! 4. applies the successful write to the oracle. +//! +//! Step 2 keeps the catalog readable at the oracle read timestamp. It also enforces fencing for +//! a post-fence retry: the fresh oracle timestamp's advance frontier is above the stale process's +//! cached catalog upper, so the advance reaches Persist and observes the fence before another txns +//! write. +//! +//! On `environmentd` bootstrap in read/write mode, system-table snapshots cannot complete until a +//! txns-shard write has advanced the table uppers. A stale write either linearizes before this +//! barrier and is observed by the snapshot, or conflicts and follows the fenced retry path above. +//! This relies on generations sharing the oracle. +//! +//! Work that requires coordinator state is returned via [`Message::GroupCommitApplied`]. use std::collections::{BTreeMap, BTreeSet}; use std::future::Future; +use std::ops::ControlFlow; use std::pin::Pin; use std::sync::{Arc, LazyLock}; use std::time::{Duration, Instant}; @@ -18,25 +42,32 @@ use std::time::{Duration, Instant}; use derivative::Derivative; use futures::future::{BoxFuture, FutureExt}; use mz_adapter_types::connection::ConnectionId; +use mz_adapter_types::dyncfgs::GROUP_COMMIT_MAX_ATTEMPTS; use mz_catalog::builtin::{BuiltinTable, MZ_SESSIONS}; +use mz_dyncfg::{ConfigSet, ConfigValHandle}; use mz_expr::CollectionPlan; -use mz_ore::metrics::MetricsFutureExt; +use mz_ore::assert_none; +use mz_ore::halt; +use mz_ore::instrument; +use mz_ore::now::NowFn; use mz_ore::task; -use mz_ore::tracing::OpenTelemetryContext; -use mz_ore::{assert_none, instrument}; -use mz_repr::{CatalogItemId, Timestamp}; +use mz_repr::{CatalogItemId, GlobalId, Timestamp}; use mz_sql::names::ResolvedIds; use mz_sql::plan::{ExplainPlanPlan, ExplainTimestampPlan, Explainee, ExplaineeStatement, Plan}; use mz_sql::session::metadata::SessionMetadata; use mz_storage_client::client::TableData; -use mz_timestamp_oracle::WriteTimestamp; +use mz_storage_client::controller::{TableRegistration, TableWriteHandle}; +use mz_storage_types::controller::StorageError; +use mz_timestamp_oracle::{TimestampOracle, WriteTimestamp}; use smallvec::SmallVec; -use tokio::sync::{Notify, OwnedMutexGuard, OwnedSemaphorePermit, Semaphore, oneshot}; -use tracing::{Instrument, Span, debug_span, info, warn}; +use tokio::sync::{Notify, OwnedMutexGuard, OwnedSemaphorePermit, Semaphore, mpsc, oneshot}; +use tracing::{Instrument, Span, info, warn}; -use crate::catalog::{BuiltinTableUpdate, Catalog}; +use crate::catalog::{BuiltinTableUpdate, Catalog, CatalogUpperHandle}; use crate::coord::{Coordinator, Message, PendingTxn, PlanValidity}; +use crate::metrics::Metrics; use crate::session::{GroupCommitWriteLocks, Session, WriteLocks}; +use crate::statement_logging::StatementLoggingId; use crate::util::{CompletedClientTransmitter, ResultExt}; use crate::{AdapterError, ExecuteContext}; @@ -57,15 +88,15 @@ pub enum DeferredOp { impl DeferredOp { /// Certain operations, e.g. "blind writes"/`INSERT` statements, can be optimistically retried /// because we can share a write lock between multiple operations. In this case we wait to - /// acquire the locks until [`group_commit`], where writes are groupped by collection and - /// comitted at a single timestamp. + /// acquire the locks until [`stage_group_commit`], where writes are grouped by collection and + /// committed at a single timestamp. /// /// Other operations, e.g. read-then-write plans/`UPDATE` statements, must uniquely hold their /// write locks and thus we should acquire the locks in [`try_deferred`] to prevent multiple /// queued plans attempting to get retried at the same time, when we know only one can proceed. /// /// [`try_deferred`]: crate::coord::Coordinator::try_deferred - /// [`group_commit`]: crate::coord::Coordinator::group_commit + /// [`stage_group_commit`]: crate::coord::Coordinator::stage_group_commit pub(crate) fn can_be_optimistically_retried(&self) -> bool { match self { DeferredOp::Plan(_) => false, @@ -176,6 +207,320 @@ impl PendingWriteTxn { } } +pub(crate) enum TableWriteCmd { + GroupCommit(GroupCommitRequest), + Register { + tables: Vec, + result: oneshot::Sender, + }, + Forget { + ids: Vec, + result: oneshot::Sender, + }, +} + +/// A group commit staged on the coordinator loop for the [`GroupCommitter`]. +pub(crate) struct GroupCommitRequest { + /// Appends resolved to their latest [`GlobalId`]. Empty for a keepalive. + appends: Vec<(GlobalId, Vec)>, + responses: Vec, + statement_logging_ids: Vec, + notifies: Vec>, + write_locks: GroupCommitWriteLocks, + /// In-progress permits held until the commit is applied. + permits: Vec, + contains_internal_system_write: bool, + span: Span, +} + +impl GroupCommitRequest { + fn merge(&mut self, other: GroupCommitRequest) { + let GroupCommitRequest { + appends, + responses, + statement_logging_ids, + notifies, + write_locks, + permits, + contains_internal_system_write, + span: _, + } = other; + self.appends.extend(appends); + self.responses.extend(responses); + self.statement_logging_ids.extend(statement_logging_ids); + self.notifies.extend(notifies); + self.write_locks.extend(write_locks); + self.permits.extend(permits); + self.contains_internal_system_write |= contains_internal_system_write; + } +} + +/// Serializes runtime txns-shard writes off the coordinator loop. +/// +/// Dropped group-commit requests retire their clients through [`ExecuteContext`]. Dropped +/// registration or forget replies cause their coordinator waiters to halt. +pub(crate) struct GroupCommitter { + rx: mpsc::UnboundedReceiver, + oracle: Arc + Send + Sync>, + table_write_handle: Arc, + catalog_upper: CatalogUpperHandle, + internal_cmd_tx: mpsc::UnboundedSender, + now: NowFn, + metrics: Metrics, + max_attempts: ConfigValHandle, +} + +impl GroupCommitter { + async fn run(mut self) { + while let Some(cmd) = self.rx.recv().await { + // `commit` may pull a non-mergeable command off the queue while it waits in the + // throttle. Process it before receiving anew, to preserve queue order. + let mut next = Some(cmd); + while let Some(cmd) = next.take() { + match cmd { + TableWriteCmd::GroupCommit(request) => { + let span = request.span.clone(); + match self.commit(request).instrument(span).await { + ControlFlow::Continue(deferred) => next = deferred, + ControlFlow::Break(()) => return, + } + } + TableWriteCmd::Register { tables, result } => { + let Some(write_ts) = self + .write_to_txns(None, |ts, _advance_to| { + self.table_write_handle.register(ts, tables.clone()) + }) + .await + else { + return; + }; + let _ = result.send(write_ts.timestamp); + } + TableWriteCmd::Forget { ids, result } => { + let Some(write_ts) = self + .write_to_txns(None, |ts, _advance_to| { + self.table_write_handle.forget(ts, ids.clone()) + }) + .await + else { + return; + }; + let _ = result.send(write_ts.timestamp); + } + } + } + } + } + + /// Writes at a fresh oracle timestamp and applies a successful write to the oracle. + /// + /// Returns `None` when the table write worker shuts down. + async fn write_to_txns( + &self, + op_duration_metric: Option<&prometheus::Histogram>, + mut op: impl FnMut(Timestamp, Timestamp) -> oneshot::Receiver>, + ) -> Option { + // Persistent conflicts indicate an unexpected writer. Halt instead of spinning forever. + let mut attempt = 0; + let write_ts = loop { + let max_attempts = self.max_attempts.get().max(1); + if attempt >= max_attempts { + halt!( + "txns-shard write reached attempt limit {max_attempts} after {attempt} conflicts, rebuilding" + ); + } + attempt += 1; + let write_ts = self.oracle.write_ts().await; + + // A post-fence retry has an advance frontier above this handle's stale upper, so this + // reaches Persist and observes the fence. + let catalog_upper_start = Instant::now(); + self.catalog_upper + .advance_upper(write_ts.advance_to) + .await + .unwrap_or_terminate("unable to advance catalog upper"); + self.metrics + .group_commit_catalog_upper_seconds + .observe(catalog_upper_start.elapsed().as_secs_f64()); + + let op_start = Instant::now(); + let op_res = op(write_ts.timestamp, write_ts.advance_to).await; + if let Some(metric) = op_duration_metric { + metric.observe(op_start.elapsed().as_secs_f64()); + } + + match op_res { + Ok(Ok(())) => break write_ts, + Ok(Err(StorageError::InvalidUppers(_))) => { + warn!( + write_ts = %write_ts.timestamp, + attempt, + "txns-shard write conflicted with another writer, retrying at a fresh timestamp" + ); + continue; + } + Ok(Err(other)) => { + Err::<(), _>(other).unwrap_or_terminate("cannot fail to write to txns shard"); + unreachable!("unwrap_or_terminate does not return on Err"); + } + Err(_recv) => { + // The outcome is indeterminate. Stop before processing more writes. + warn!("table write worker gone (process shutting down), winding down"); + return None; + } + } + }; + + let now: Timestamp = (self.now)().into(); + crate::coord::timeline::check_runaway_write_ts(&now, write_ts.timestamp); + + self.oracle.apply_write(write_ts.timestamp).await; + + Some(write_ts) + } + + /// Applies a staged group commit. + /// + /// Group commits queued during throttling are merged until a registration or forget command + /// preserves the queue boundary. `Break` means the table worker shut down. + async fn commit( + &mut self, + mut request: GroupCommitRequest, + ) -> ControlFlow<(), Option> { + let mut deferred_cmd = None; + // Once the channel is closed, `recv` resolves immediately with `None`. Disable that + // select branch then, so the throttle sleep still runs instead of busy-looping. + let mut rx_closed = false; + + // Throttle: keep the global write timeline from running ahead of the wall clock. The + // peek and the sleep happen here in the committer task, so a slow oracle backend does + // not stall the coordinator loop. + loop { + while deferred_cmd.is_none() { + match self.rx.try_recv() { + Ok(TableWriteCmd::GroupCommit(other)) => request.merge(other), + Ok(other) => deferred_cmd = Some(other), + Err(_) => break, + } + } + + // Internal writes bypass the throttle for mocked clocks. A queued DDL registration or + // forget bypasses it because DDL was not previously throttled and blocks the loop. + if request.contains_internal_system_write || deferred_cmd.is_some() { + break; + } + let ts = self.oracle.peek_write_ts().await; + let now: Timestamp = (self.now)().into(); + if ts <= now { + break; + } + // A fixed one-second cap bounds clock-regression stalls. Queue wakeups do not extend + // this deadline. + let remaining_ms = std::cmp::min(ts.saturating_sub(now), Timestamp::from(1_000u64)); + let sleep = tokio::time::sleep(Duration::from_millis(remaining_ms.into())); + tokio::pin!(sleep); + loop { + tokio::select! { + _ = &mut sleep => break, + cmd = self.rx.recv(), if deferred_cmd.is_none() && !rx_closed => match cmd { + Some(TableWriteCmd::GroupCommit(other)) => request.merge(other), + Some(other) => deferred_cmd = Some(other), + None => rx_closed = true, + }, + } + if request.contains_internal_system_write || deferred_cmd.is_some() { + break; + } + } + } + + let GroupCommitRequest { + appends, + responses, + statement_logging_ids, + notifies, + write_locks, + permits, + contains_internal_system_write: _, + span: _, + } = request; + + let append_metric = self.metrics.append_table_duration_seconds.clone(); + let Some(write_ts) = self + .write_to_txns(Some(&append_metric), |ts, advance_to| { + self.table_write_handle + .append(ts, advance_to, appends.clone()) + }) + .await + else { + // Dropping the batch retires its clients through `ExecuteContext`. + return ControlFlow::Break(()); + }; + let timestamp = write_ts.timestamp; + + let modified_tables: Vec<_> = appends + .iter() + .filter_map(|(id, updates)| { + (id.is_user() && !updates.iter().all(|u| u.is_empty())).then_some(id) + }) + .collect(); + if !modified_tables.is_empty() { + info!( + "Appending to tables, {modified_tables:?}, at {timestamp}, advancing to {}", + write_ts.advance_to + ); + } + + // Hold permits and locks until `apply_write` completes. Otherwise another write could + // proceed while this timestamp is not yet readable. + drop(permits); + drop(write_locks); + + for notify in notifies { + let _ = notify.send(()); + } + + // The coordinator records timestamps before retiring responses. The applied write + // timestamp is also a valid frontier for local read holds. + if self + .internal_cmd_tx + .send(Message::GroupCommitApplied { + responses, + statement_logging_ids, + write_ts: timestamp, + }) + .is_err() + { + warn!("coordinator shut down before a group commit could be finalized"); + } + + ControlFlow::Continue(deferred_cmd) + } +} + +pub(crate) fn spawn_group_committer( + rx: mpsc::UnboundedReceiver, + oracle: Arc + Send + Sync>, + table_write_handle: Arc, + catalog_upper: CatalogUpperHandle, + internal_cmd_tx: mpsc::UnboundedSender, + now: NowFn, + metrics: Metrics, + dyncfgs: &ConfigSet, +) { + let committer = GroupCommitter { + rx, + oracle, + table_write_handle, + catalog_upper, + internal_cmd_tx, + now, + metrics, + max_attempts: GROUP_COMMIT_MAX_ATTEMPTS.handle(dyncfgs), + }; + task::spawn(|| "group_committer", committer.run()); +} + impl Coordinator { /// Send a message to the Coordinate to start a group commit. pub(crate) fn trigger_group_commit(&mut self) { @@ -279,67 +624,11 @@ impl Coordinator { } } - /// Attempts to commit all pending write transactions in a group commit. If the timestamp - /// chosen for the writes is not ahead of `now()`, then we can execute and commit the writes - /// immediately. Otherwise we must wait for `now()` to advance past the timestamp chosen for the - /// writes. - #[instrument(level = "debug")] - pub(crate) async fn try_group_commit(&mut self, permit: Option) { - let timestamp = self.peek_local_write_ts().await; - let now = Timestamp::from((self.catalog().config().now)()); - - // HACK: This is a special case to allow writes to the mz_sessions table to proceed even - // if the timestamp oracle is ahead of the current walltime. We do this because there are - // some tests that mock the walltime, so it doesn't automatically advance, and updating - // those tests to advance the walltime while creating a connection is too much. - // - // TODO(parkmycar): Get rid of the check below when refactoring group commits. - let contains_internal_system_write = self - .pending_writes - .iter() - .any(|write| write.is_internal_system()); - - if timestamp > now && !contains_internal_system_write { - // Cap retry time to 1s. In cases where the system clock has retreated by - // some large amount of time, this prevents against then waiting for that - // large amount of time in case the system clock then advances back to near - // what it was. - let remaining_ms = std::cmp::min(timestamp.saturating_sub(now), 1_000.into()); - let internal_cmd_tx = self.internal_cmd_tx.clone(); - task::spawn( - || "group_commit_initiate", - async move { - tokio::time::sleep(Duration::from_millis(remaining_ms.into())).await; - // It is not an error for this task to be running after `internal_cmd_rx` is dropped. - let result = - internal_cmd_tx.send(Message::GroupCommitInitiate(Span::current(), permit)); - if let Err(e) = result { - warn!("internal_cmd_rx dropped before we could send: {:?}", e); - } - } - .instrument(Span::current()), - ); - } else { - self.group_commit(permit).await; - } - } - - /// Tries to commit all pending writes transactions at the same timestamp. + /// Stages pending writes for the group committer. /// - /// If the caller of this function has the `write_lock` acquired, then they can optionally pass - /// it in to this method. If the caller does not have the `write_lock` acquired and the - /// `write_lock` is currently locked by another operation, then only writes to system tables - /// and table advancements will be applied. If the caller does not have the `write_lock` - /// acquired and the `write_lock` is not currently locked by another operation, then group - /// commit will acquire it and all writes will be applied. - /// - /// All applicable pending writes will be combined into a single Append command and sent to - /// STORAGE as a single batch. All applicable writes will happen at the same timestamp and all - /// involved tables will be advanced to some timestamp larger than the timestamp of the write. - /// - /// Returns the timestamp of the write. - #[instrument(name = "coord::group_commit")] - pub(crate) async fn group_commit(&mut self, permit: Option) -> Timestamp { + /// Writes blocked on locks are deferred. Included writes share one timestamp. + #[instrument(name = "coord::stage_group_commit")] + pub(crate) fn stage_group_commit(&mut self, permit: Option) { let mut validated_writes = Vec::new(); let mut deferred_writes = Vec::new(); let mut group_write_locks = GroupCommitWriteLocks::default(); @@ -447,32 +736,13 @@ impl Coordinator { self.defer_op(acquire_future, DeferredOp::Write(write)); } - // The value returned here still might be ahead of `now()` if `now()` has gone backwards at - // any point during this method or if this was triggered from DDL. We will still commit the - // write without waiting for `now()` to advance. This is ok because the next batch of writes - // will trigger the wait loop in `try_group_commit()` if `now()` hasn't advanced past the - // global timeline, preventing an unbounded advancing of the global timeline ahead of - // `now()`. Additionally DDL is infrequent enough and takes long enough that we don't think - // it's practical for continuous DDL to advance the global timestamp in an unbounded manner. - let WriteTimestamp { - timestamp, - advance_to, - } = self.get_local_write_ts().await; - - // Advance the catalog shard's upper to keep it in sync with the oracle - // timestamp. This ensures that reads of mz_catalog_raw at the oracle's - // read_ts do not block waiting for the catalog shard's upper to advance. - let catalog_upper_start = Instant::now(); - self.catalog - .advance_upper(advance_to) - .await - .unwrap_or_terminate("unable to advance catalog upper"); - self.metrics - .group_commit_catalog_upper_seconds - .observe(catalog_upper_start.elapsed().as_secs_f64()); + let contains_internal_system_write = validated_writes + .iter() + .any(|write| write.is_internal_system()); let mut appends: BTreeMap> = BTreeMap::new(); let mut responses = Vec::with_capacity(validated_writes.len()); + let mut statement_logging_ids = Vec::new(); let mut notifies = Vec::new(); for validated_write_txn in validated_writes { @@ -500,7 +770,7 @@ impl Coordinator { } } if let Some(id) = ctx.extra().contents() { - self.set_statement_execution_timestamp(id, timestamp); + statement_logging_ids.push(id); } responses.push(CompletedClientTransmitter::new(ctx, response, action)); @@ -545,91 +815,60 @@ impl Coordinator { }) .collect(); - // Log non-empty user appends. - let modified_tables: Vec<_> = appends - .iter() - .filter_map(|(id, updates)| { - if id.is_user() && !updates.iter().all(|u| u.is_empty()) { - Some(id) - } else { - None - } - }) - .collect(); - if !modified_tables.is_empty() { - info!( - "Appending to tables, {modified_tables:?}, at {timestamp}, advancing to {advance_to}" - ); + // Always enqueue keepalives so registered tables remain readable at the oracle read ts. + let request = GroupCommitRequest { + appends, + responses, + statement_logging_ids, + notifies, + write_locks: group_write_locks, + permits: permit.into_iter().collect(), + contains_internal_system_write, + span: Span::current(), + }; + if self + .group_committer_tx + .send(TableWriteCmd::GroupCommit(request)) + .is_err() + { + // Dropping the request retires its clients and notifies its waiters. + warn!("group committer task gone, dropping staged group commit"); } + } - // Instrument our table writes since they can block the coordinator. - let histogram = self.metrics.append_table_duration_seconds.clone(); - - // NOTE: It is important that we append, even when there are no actual - // appends. This makes sure we periodically bump the upper of all - // tables, which is required to make them readable at the latest oracle - // read ts. - - let append_fut = self - .controller - .storage - .append_table(timestamp, advance_to, appends) - .expect("invalid updates") - .wall_time() - .observe(histogram); - - // Spawn a task to do the table writes. - let internal_cmd_tx = self.internal_cmd_tx.clone(); - let apply_write_fut = self.apply_local_write(timestamp); - - let span = debug_span!(parent: None, "group_commit_apply"); - OpenTelemetryContext::obtain().attach_as_parent_to(&span); - task::spawn( - || "group_commit_apply", - async move { - // Wait for the writes to complete. - match append_fut - .instrument(debug_span!("group_commit_apply::append_fut")) - .await - { - Ok(append_result) => { - append_result.unwrap_or_terminate("cannot fail to apply appends") - } - Err(_) => warn!("Writer terminated with writes in indefinite state"), - }; - - // Apply the write by marking the timestamp as complete on the timeline. - apply_write_fut - .instrument(debug_span!("group_commit_apply::append_write_fut")) - .await; - - // Notify the external clients of the result. - for response in responses { - let (mut ctx, result) = response.finalize(); - ctx.session_mut().apply_write(timestamp); - ctx.retire(result); - } - - // IMPORTANT: Make sure we hold the permit and write locks - // until here, to prevent other writes from going through while - // we haven't yet applied the write at the timestamp oracle. - drop(permit); - drop(group_write_locks); - - // Advance other timelines. - if let Err(e) = internal_cmd_tx.send(Message::AdvanceTimelines) { - warn!("Server closed with non-advanced timelines, {e}"); - } - - for notify in notifies { - // We don't care if the listeners have gone away. - let _ = notify.send(()); - } - } - .instrument(span), - ); + /// Registers `tables` in FIFO order and returns the applied timestamp. + pub(crate) async fn register_tables_via_committer( + &self, + tables: Vec, + ) -> Timestamp { + let (tx, rx) = oneshot::channel(); + if self + .group_committer_tx + .send(TableWriteCmd::Register { tables, result: tx }) + .is_err() + { + halt!("group committer terminated before a table registration could be submitted"); + } + match rx.await { + Ok(ts) => ts, + Err(_) => halt!("group committer terminated with a table registration outstanding"), + } + } - timestamp + /// Forgets `ids` in FIFO order and returns the applied timestamp. + pub(crate) async fn forget_tables_via_committer(&self, ids: Vec) -> Timestamp { + let (tx, rx) = oneshot::channel(); + if self + .group_committer_tx + .send(TableWriteCmd::Forget { ids, result: tx }) + .is_err() + { + halt!("group committer terminated before a table forget could be submitted"); + } + match rx.await { + Ok(ts) => ts, + Err(_) => halt!("group committer terminated with a table forget outstanding"), + } } /// Submit a write to be executed during the next group commit and trigger a group commit. @@ -812,19 +1051,10 @@ impl<'a> BuiltinTableAppend<'a> { Box::pin(rx.map(|_| ())) } - /// Submit a write to a system table. - /// - /// This method will block the Coordinator on acquiring a write timestamp from the timestamp - /// oracle, and then returns a `Future` that will complete once the write has been applied and - /// the write timestamp. + /// Submits a system-table write immediately and returns its completion future. /// - /// Note: When in read-only mode, this will buffer the update, the - /// returned future will resolve immediately, without the update actually - /// having been written, and no timestamp is returned. - pub async fn execute( - self, - mut updates: Vec, - ) -> (BuiltinTableAppendNotify, Option) { + /// In read-only mode, buffers the update and returns a ready future. + pub fn execute(self, mut updates: Vec) -> BuiltinTableAppendNotify { if self.coord.controller.read_only() { self.coord .buffered_builtin_table_updates @@ -832,28 +1062,23 @@ impl<'a> BuiltinTableAppend<'a> { .expect("in read-only mode") .append(&mut updates); - return (Box::pin(futures::future::ready(())), None); + return Box::pin(futures::future::ready(())); } let (tx, rx) = oneshot::channel(); - // Most DDL queries cause writes to system tables. Unlike writes to user tables, system - // table writes do not wait for a group commit, they explicitly trigger one. There is a - // possibility that if a user is executing DDL at a rate faster than 1 query per - // millisecond, then the global timeline will unboundedly advance past the system clock. - // This can cause future queries to block, but will not affect correctness. Since this - // rate of DDL is unlikely, we allow DDL to explicitly trigger group commit. + // DDL system writes bypass the periodic wait. Extremely fast DDL can advance the global + // timeline ahead of the wall clock, delaying later queries without affecting correctness. self.coord.pending_writes.push(PendingWriteTxn::System { updates, source: BuiltinTableUpdateSource::Internal(tx), }); - let write_ts = self.coord.group_commit(None).await; + self.coord.stage_group_commit(None); - // Avoid excessive group commits by resetting the periodic table advancement timer. The - // group commit triggered by above will already advance all tables. + // The staged commit already advances every table. self.coord.advance_timelines_interval.reset(); - (Box::pin(rx.map(|_| ())), Some(write_ts)) + Box::pin(rx.map(|_| ())) } } @@ -1080,3 +1305,235 @@ pub(crate) fn waiting_on_startup_appends( None => None, } } + +#[cfg(test)] +mod tests { + use std::sync::Mutex; + use std::sync::atomic::{AtomicUsize, Ordering}; + + use async_trait::async_trait; + use mz_ore::metrics::MetricsRegistry; + use mz_ore::now::SYSTEM_TIME; + use timely::progress::Antichain; + + use super::*; + use crate::catalog::Catalog; + + #[derive(Debug, Default)] + struct MemTimestampOracle { + read_write_ts: Mutex<(Timestamp, Timestamp)>, + apply_writes: AtomicUsize, + } + + impl MemTimestampOracle { + fn starting_at(ts: Timestamp) -> Self { + Self { + read_write_ts: Mutex::new((ts, ts)), + apply_writes: AtomicUsize::new(0), + } + } + } + + #[async_trait] + impl TimestampOracle for MemTimestampOracle { + async fn write_ts(&self) -> WriteTimestamp { + let (read_ts, write_ts) = &mut *self.read_write_ts.lock().expect("lock poisoned"); + let new_write_ts = std::cmp::max(*read_ts, *write_ts).step_forward(); + *write_ts = new_write_ts; + WriteTimestamp { + timestamp: new_write_ts, + advance_to: new_write_ts.step_forward(), + } + } + + async fn peek_write_ts(&self) -> Timestamp { + let (_, write_ts) = &*self.read_write_ts.lock().expect("lock poisoned"); + *write_ts + } + + async fn read_ts(&self) -> Timestamp { + let (read_ts, _) = &*self.read_write_ts.lock().expect("lock poisoned"); + *read_ts + } + + async fn apply_write(&self, lower_bound: Timestamp) { + self.apply_writes.fetch_add(1, Ordering::SeqCst); + let (read_ts, write_ts) = &mut *self.read_write_ts.lock().expect("lock poisoned"); + *read_ts = std::cmp::max(*read_ts, lower_bound); + *write_ts = std::cmp::max(*read_ts, *write_ts); + } + } + + #[derive(Debug)] + struct ConflictingTableWriteHandle { + conflicts: usize, + calls: AtomicUsize, + write_timestamps: Mutex>, + } + + impl ConflictingTableWriteHandle { + fn new(conflicts: usize) -> Self { + Self { + conflicts, + calls: AtomicUsize::new(0), + write_timestamps: Mutex::new(Vec::new()), + } + } + + fn respond(&self, write_ts: Timestamp) -> oneshot::Receiver> { + let call = self.calls.fetch_add(1, Ordering::SeqCst); + self.write_timestamps + .lock() + .expect("lock poisoned") + .push(write_ts); + let (tx, rx) = oneshot::channel(); + let result = if call < self.conflicts { + Err(StorageError::InvalidUppers(vec![ + mz_storage_types::controller::InvalidUpper { + id: GlobalId::User(1), + current_upper: Antichain::from_elem(write_ts.step_forward()), + }, + ])) + } else { + Ok(()) + }; + tx.send(result).expect("receiver still in scope"); + rx + } + } + + impl TableWriteHandle for ConflictingTableWriteHandle { + fn append( + &self, + write_ts: Timestamp, + _advance_to: Timestamp, + _commands: Vec<(GlobalId, Vec)>, + ) -> oneshot::Receiver> { + self.respond(write_ts) + } + + fn register( + &self, + register_ts: Timestamp, + _tables: Vec, + ) -> oneshot::Receiver> { + self.respond(register_ts) + } + + fn forget( + &self, + forget_ts: Timestamp, + _ids: Vec, + ) -> oneshot::Receiver> { + self.respond(forget_ts) + } + } + + #[mz_ore::test(tokio::test)] + #[cfg_attr(miri, ignore)] // too slow + async fn test_write_to_txns_conflict_retry() { + Catalog::with_debug(|catalog| async move { + // Start beyond the catalog upper to exercise the durable advance path. + let initial_upper = catalog.current_upper().await; + let oracle = Arc::new(MemTimestampOracle::starting_at(initial_upper)); + let handle = Arc::new(ConflictingTableWriteHandle::new(1)); + let oracle_dyn: Arc + Send + Sync> = + Arc::::clone(&oracle); + let handle_dyn: Arc = + Arc::::clone(&handle); + let (_tx, rx) = mpsc::unbounded_channel(); + let (internal_cmd_tx, _internal_cmd_rx) = mpsc::unbounded_channel(); + let committer = GroupCommitter { + rx, + oracle: oracle_dyn, + table_write_handle: handle_dyn, + catalog_upper: catalog.upper_handle(), + internal_cmd_tx, + now: SYSTEM_TIME.clone(), + metrics: Metrics::register_into(&MetricsRegistry::new()), + max_attempts: ConfigValHandle::disconnected(2), + }; + + let write_ts = committer + .write_to_txns(None, |ts, advance_to| { + assert_eq!(advance_to, ts.step_forward()); + handle.append(ts, advance_to, Vec::new()) + }) + .await + .expect("worker stays alive in this test"); + + let attempts = handle + .write_timestamps + .lock() + .expect("lock poisoned") + .clone(); + assert_eq!(attempts.len(), 2, "one conflict, one success"); + assert!( + attempts[0] > initial_upper, + "attempts start past the initial catalog upper: {attempts:?} vs {initial_upper}" + ); + assert!( + attempts[0] < attempts[1], + "retry must use a fresh, larger timestamp: {attempts:?}" + ); + assert_eq!(write_ts.timestamp, attempts[1]); + + assert_eq!(oracle.apply_writes.load(Ordering::SeqCst), 1); + assert_eq!(oracle.read_ts().await, write_ts.timestamp); + + let catalog_upper = catalog.current_upper().await; + assert!( + catalog_upper >= write_ts.advance_to, + "catalog upper {catalog_upper} must cover the write's advance_to {}", + write_ts.advance_to + ); + + catalog.expire().await; + }) + .await; + } + + #[mz_ore::test(tokio::test)] + #[cfg_attr(miri, ignore)] // too slow + async fn test_write_to_txns_zero_limit_allows_one_attempt() { + Catalog::with_debug(|catalog| async move { + let initial_upper = catalog.current_upper().await; + let oracle = Arc::new(MemTimestampOracle::starting_at(initial_upper)); + let handle = Arc::new(ConflictingTableWriteHandle::new(0)); + let oracle_dyn: Arc + Send + Sync> = + Arc::::clone(&oracle); + let handle_dyn: Arc = + Arc::::clone(&handle); + let (_tx, rx) = mpsc::unbounded_channel(); + let (internal_cmd_tx, _internal_cmd_rx) = mpsc::unbounded_channel(); + let committer = GroupCommitter { + rx, + oracle: oracle_dyn, + table_write_handle: handle_dyn, + catalog_upper: catalog.upper_handle(), + internal_cmd_tx, + now: SYSTEM_TIME.clone(), + metrics: Metrics::register_into(&MetricsRegistry::new()), + max_attempts: ConfigValHandle::disconnected(0), + }; + + let write_ts = committer + .write_to_txns(None, |ts, advance_to| { + handle.append(ts, advance_to, Vec::new()) + }) + .await + .expect("zero limit permits one successful attempt"); + + let attempts = handle + .write_timestamps + .lock() + .expect("lock poisoned") + .clone(); + assert_eq!(attempts, vec![write_ts.timestamp]); + assert_eq!(oracle.apply_writes.load(Ordering::SeqCst), 1); + + catalog.expire().await; + }) + .await; + } +} diff --git a/src/adapter/src/coord/catalog_implications.rs b/src/adapter/src/coord/catalog_implications.rs index 02722838d563e..5f3dc9b46a13d 100644 --- a/src/adapter/src/coord/catalog_implications.rs +++ b/src/adapter/src/coord/catalog_implications.rs @@ -946,8 +946,8 @@ impl Coordinator { // logging around to indicate when an actual dependency error might // occur. if !tables_to_drop.is_empty() { - let ts = self.get_local_write_ts().await; - self.drop_tables(tables_to_drop.into_iter().collect_vec(), ts.timestamp); + self.drop_tables(tables_to_drop.into_iter().collect_vec()) + .await; } if !sources_to_drop.is_empty() { @@ -1099,41 +1099,45 @@ impl Coordinator { table_collections_to_create: BTreeMap, execution_timestamps_to_set: BTreeSet, ) -> Result<(), AdapterError> { - // If we have tables, determine the initial validity for the table. + // Storage filters table catalog items that are not managed by txn-wal. + let table_ids: Vec = table_collections_to_create.keys().copied().collect(); + let collections = table_collections_to_create.into_iter().collect_vec(); + + // Confirm leadership after allocating the collections' initial timestamp. let write_ts = self.get_local_write_ts().await; let register_ts = write_ts.timestamp; - - // After acquiring `register_ts` but before using it, we need to - // be sure we're still the leader. Otherwise a new generation - // may also be trying to use `register_ts` for a different - // purpose. See materialize#28216. - // - // We also should advance the upper of the catalog shard, to ensure it - // is readable at the oracle read ts after we bump it to the - // `register_ts` below. Both of these needs are served by calling - // `advance_upper`. self.catalog .advance_upper(write_ts.advance_to) .await .unwrap_or_terminate("unable to advance catalog upper"); - for id in execution_timestamps_to_set { - self.set_statement_execution_timestamp(id, register_ts); + { + let storage_metadata = self.catalog.state().storage_metadata(); + self.controller + .storage + .create_collections(storage_metadata, Some(register_ts), collections) + .await + .unwrap_or_terminate("cannot fail to create collections"); } - let storage_metadata = self.catalog.state().storage_metadata(); - - self.controller + // Registration can choose a later timestamp than the collections' initial since. Reads + // remain above the applied registration timestamp. + let registrations = self + .controller .storage - .create_collections( - storage_metadata, - Some(register_ts), - table_collections_to_create.into_iter().collect_vec(), - ) - .await - .unwrap_or_terminate("cannot fail to create collections"); + .table_registrations(table_ids) + .unwrap_or_terminate("cannot fail to look up table registrations"); + let table_ts = if registrations.is_empty() { + // Without txn-wal registration, this timestamp still makes the collections readable. + self.apply_local_write(register_ts).await; + register_ts + } else { + self.register_tables_via_committer(registrations).await + }; - self.apply_local_write(register_ts).await; + for id in execution_timestamps_to_set { + self.set_statement_execution_timestamp(id, table_ts); + } Ok(()) } @@ -1361,28 +1365,26 @@ impl Coordinator { .desc .at_version(RelationVersionSelector::Specific(new_version)); + // Confirm leadership before mutating controller state. let write_ts = self.get_local_write_ts().await; - let register_ts = write_ts.timestamp; - - // Ensure the catalog will be immediately readable at the read ts we're - // about to bump. self.catalog .advance_upper(write_ts.advance_to) .await .unwrap_or_terminate("unable to advance catalog upper"); - // Alter the table description, creating a "new" collection. self.controller .storage - .alter_table_desc( - existing_gid, - new_gid, - new_desc, - expected_version, - register_ts, - ) + .alter_table_desc(existing_gid, new_gid, new_desc, expected_version) .await - .expect("failed to alter desc of table"); + .unwrap_or_terminate("failed to alter desc of table"); + + // FIFO registration follows all staged writes to the old collection. + let registrations = self + .controller + .storage + .table_registrations(vec![new_gid]) + .unwrap_or_terminate("cannot fail to look up table registrations"); + self.register_tables_via_committer(registrations).await; // Initialize the ReadPolicy which ensures we have the correct read holds. let compaction_window = new_table @@ -1397,8 +1399,6 @@ impl Coordinator { ) .await; - self.apply_local_write(register_ts).await; - // Alter is complete! We can drop our read hold. drop(existing_table_read_hold); diff --git a/src/adapter/src/coord/cluster_controller.rs b/src/adapter/src/coord/cluster_controller.rs index 853351f777b6d..921c34a61281e 100644 --- a/src/adapter/src/coord/cluster_controller.rs +++ b/src/adapter/src/coord/cluster_controller.rs @@ -364,6 +364,7 @@ impl Coordinator { replication_factor: expected.replication_factor, availability_zones: expected.availability_zones.0, logging: expected.logging, + arrangement_compression: expected.arrangement_compression, auto_scaling_policy: expected.auto_scaling_policy, reconfiguration: expected.reconfiguration, burst: expected.burst, @@ -553,11 +554,11 @@ impl Coordinator { continue; }; let id_ts = self.get_catalog_write_ts().await; - match self + let result = self .catalog() .allocate_replica_ids(*cluster_id, 1, id_ts) - .await - { + .await; + match result { Ok(ids) => { replica_ids.push(ids.into_iter().next().expect("allocated one replica id")) } @@ -723,6 +724,7 @@ impl Coordinator { new_replication_factor, new_availability_zones, new_logging, + new_arrangement_compression, reconfiguration, burst, } = write; @@ -738,6 +740,9 @@ impl Coordinator { if let Some(logging) = new_logging { managed.logging = logging.clone(); } + if let Some(arrangement_compression) = new_arrangement_compression { + managed.arrangement_compression = *arrangement_compression; + } if let Some(reconfiguration) = reconfiguration { managed.reconfiguration = reconfiguration.record.as_ref().map(memory_reconfiguration); } @@ -803,6 +808,7 @@ impl Coordinator { location, compute: ComputeReplicaConfig { logging: shape.logging.clone(), + arrangement_compression: shape.arrangement_compression, }, }; @@ -846,6 +852,7 @@ fn replica_shape(config: &mz_controller::clusters::ReplicaConfig) -> Option, ts: Timestamp) { + pub(crate) async fn drop_tables(&mut self, tables: Vec<(CatalogItemId, GlobalId)>) { for (item_id, _gid) in &tables { self.active_webhooks.remove(item_id); } + let table_gids: Vec<_> = tables.into_iter().map(|(_id, gid)| gid).collect(); + + // FIFO ordering places the forget after every staged append. + let forget_ids = self + .controller + .storage + .txns_table_ids(table_gids.clone()) + .unwrap_or_terminate("cannot fail to look up txns-registered tables"); + if !forget_ids.is_empty() { + self.forget_tables_via_committer(forget_ids).await; + } + let storage_metadata = self.catalog.state().storage_metadata(); - let table_gids = tables.into_iter().map(|(_id, gid)| gid).collect(); self.controller .storage - .drop_tables(storage_metadata, table_gids, ts) + .drop_tables(storage_metadata, table_gids) .unwrap_or_terminate("cannot fail to drop tables"); } @@ -730,8 +738,8 @@ impl Coordinator { // Retire off the coordinator loop. We wait for each `mz_subscriptions` retraction // before telling the subscribing client that the sink is gone. The returned notify // lets statements that caused the retirement also wait before sending their response. - // The wait must not happen on the loop, since that would block every other session - // on the group-commit oracle round trip. + // The wait must not happen on the coordinator loop, since that would block every + // other session on the group-commit oracle round trip. let (done_tx, done_rx) = tokio::sync::oneshot::channel(); task::spawn(|| "retire_compute_sinks", async move { for (sink, write_notify, reason) in to_retire { diff --git a/src/adapter/src/coord/info_metrics.rs b/src/adapter/src/coord/info_metrics.rs index 9cac4b5fa5213..20ac3d6694b3c 100644 --- a/src/adapter/src/coord/info_metrics.rs +++ b/src/adapter/src/coord/info_metrics.rs @@ -461,6 +461,7 @@ mod tests { size: size.to_string(), availability_zones: Vec::new(), logging: Default::default(), + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: Default::default(), schedule: Default::default(), @@ -498,6 +499,7 @@ mod tests { }), compute: ComputeReplicaConfig { logging: Default::default(), + arrangement_compression: false, }, }, owner_id: RoleId::User(1), @@ -680,6 +682,7 @@ mod tests { }), compute: ComputeReplicaConfig { logging: Default::default(), + arrangement_compression: false, }, }, owner_id: RoleId::User(1), diff --git a/src/adapter/src/coord/message_handler.rs b/src/adapter/src/coord/message_handler.rs index 5cf58349fb87b..c9eb4e0e17c95 100644 --- a/src/adapter/src/coord/message_handler.rs +++ b/src/adapter/src/coord/message_handler.rs @@ -109,13 +109,35 @@ impl Coordinator { Message::GroupCommitInitiate(span, permit) => { // Add an OpenTelemetry link to our current span. tracing::Span::current().add_link(span.context().span().span_context().clone()); - self.try_group_commit(permit) - .instrument(span) - .boxed_local() - .await + span.in_scope(|| self.stage_group_commit(permit)); + } + Message::GroupCommitApplied { + responses, + statement_logging_ids, + write_ts, + } => { + // Record statement timestamps before retiring, since retiring ends the statement + // execution and drops its logging record. + for id in statement_logging_ids { + self.set_statement_execution_timestamp(id, write_ts); + } + for response in responses { + let (mut ctx, result) = response.finalize(); + ctx.session_mut().apply_write(write_ts); + ctx.retire(result); + } + // The committer applied `write_ts` to the oracle, so the read ts is at least + // that and we can downgrade the local read holds without an oracle round trip. + self.downgrade_local_read_holds(write_ts); + self.advance_custom_timelines().boxed_local().await; } Message::AdvanceTimelines => { - self.advance_timelines().boxed_local().await; + // Only sent by the periodic tick in read-only mode, where group commits (which + // otherwise drive the local timeline) don't run. Fetch the oracle's read ts here, + // it is the freshest timestamp the read holds may downgrade to. + let read_ts = self.get_local_read_ts().await; + self.downgrade_local_read_holds(read_ts); + self.advance_custom_timelines().boxed_local().await; } Message::ClusterEvent(event) => self.message_cluster_event(event).boxed_local().await, Message::CancelPendingPeeks { conn_id } => { @@ -290,7 +312,7 @@ impl Coordinator { // // `storage_usage_fetch` skips this path in read-only mode, so we can // unconditionally bump the oracle write ts here. - let write_ts = self.get_local_write_ts().await.timestamp; + let write_ts = self.get_catalog_write_ts().await; let collection_timestamp: EpochMillis = write_ts.into(); // All rows in this collection cycle share `batch_id` so consumers can @@ -320,7 +342,7 @@ impl Coordinator { }) .collect(); - let (table_updates, _) = self.builtin_table_update().execute(updates).await; + let table_updates = self.builtin_table_update().execute(updates); let internal_cmd_tx = self.internal_cmd_tx.clone(); let task_span = info_span!(parent: None, "coord::storage_usage_update::table_updates"); @@ -336,7 +358,7 @@ impl Coordinator { #[mz_ore::instrument(level = "debug")] async fn storage_usage_prune(&mut self, expired: Vec) { - let (fut, _) = self.builtin_table_update().execute(expired).await; + let fut = self.builtin_table_update().execute(expired); task::spawn(|| "storage_usage_pruning_apply", async move { fut.await; }); @@ -637,7 +659,7 @@ impl Coordinator { // in https://github.com/MaterializeInc/materialize/pull/35436 lands, // append directly on `mz_catalog_server` instead of going through // the environmentd builtin-table-update path. - let (fut, _) = self.builtin_table_update().execute(updates).await; + let fut = self.builtin_table_update().execute(updates); let internal_cmd_tx = self.internal_cmd_tx.clone(); let task_span = info_span!(parent: None, "coord::arrangement_sizes_write::table_updates"); OpenTelemetryContext::obtain().attach_as_parent_to(&task_span); @@ -655,7 +677,7 @@ impl Coordinator { #[mz_ore::instrument(level = "debug")] async fn arrangement_sizes_prune(&mut self, expired: Vec) { - let (fut, _) = self.builtin_table_update().execute(expired).await; + let fut = self.builtin_table_update().execute(expired); task::spawn(|| "arrangement_sizes_pruning_apply", async move { fut.await; }); diff --git a/src/adapter/src/coord/sequencer/inner.rs b/src/adapter/src/coord/sequencer/inner.rs index fbdac84c00796..f979d56383ef1 100644 --- a/src/adapter/src/coord/sequencer/inner.rs +++ b/src/adapter/src/coord/sequencer/inner.rs @@ -4953,7 +4953,7 @@ impl Coordinator { /// `set_dataflow_metainfo`, /// - and returns a future that resolves once the builtin-table append /// has been observed, or `None` if nothing was appended. - async fn persist_dataflow_metainfo( + fn persist_dataflow_metainfo( &mut self, df_meta: DataflowMetainfo>, export_id: GlobalId, @@ -4973,12 +4973,7 @@ impl Coordinator { // Save the metainfo. self.catalog_mut().set_dataflow_metainfo(export_id, df_meta); - Some( - self.builtin_table_update() - .execute(builtin_table_updates) - .await - .0, - ) + Some(self.builtin_table_update().execute(builtin_table_updates)) } else { // Save the metainfo. self.catalog_mut().set_dataflow_metainfo(export_id, df_meta); diff --git a/src/adapter/src/coord/sequencer/inner/cluster.rs b/src/adapter/src/coord/sequencer/inner/cluster.rs index 4483c7196cd13..3525330439010 100644 --- a/src/adapter/src/coord/sequencer/inner/cluster.rs +++ b/src/adapter/src/coord/sequencer/inner/cluster.rs @@ -199,6 +199,7 @@ impl Coordinator { size, availability_zones: Default::default(), logging, + arrangement_compression: false, replication_factor: 1, optimizer_feature_overrides: Default::default(), schedule: Default::default(), @@ -214,6 +215,7 @@ impl Coordinator { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: _, schedule, @@ -241,6 +243,11 @@ impl Coordinator { Reset => logging.interval = Some(DEFAULT_REPLICA_LOGGING_INTERVAL), Unchanged => {} } + match &options.arrangement_compression { + Set(ac) => *arrangement_compression = *ac, + Reset => *arrangement_compression = false, + Unchanged => {} + } match &options.replication_factor { Set(rf) => *replication_factor = *rf, Reset => { @@ -281,6 +288,11 @@ impl Coordinator { if !matches!(options.introspection_interval, Unchanged) { coord_bail!("Cannot change INTROSPECTION INTERVAL of unmanaged clusters"); } + if !matches!(options.arrangement_compression, Unchanged) { + coord_bail!( + "Cannot change EXPERIMENTAL ARRANGEMENT COMPRESSION of unmanaged clusters" + ); + } if !matches!(options.replication_factor, Unchanged) { coord_bail!("Cannot change REPLICATION FACTOR of unmanaged clusters"); } @@ -632,6 +644,7 @@ impl Coordinator { replication_factor: new_managed.replication_factor, availability_zones: new_managed.availability_zones.clone(), logging: new_managed.logging.clone(), + arrangement_compression: new_managed.arrangement_compression, }; let unchanged = ReconfigurationDimensionsUnchanged { size: matches!(options.size, Unchanged), @@ -641,6 +654,7 @@ impl Coordinator { // `ALTER` cannot revert an in-flight interval change (or vice versa). log_logging: matches!(options.introspection_debugging, Unchanged), interval: matches!(options.introspection_interval, Unchanged), + arrangement_compression: matches!(options.arrangement_compression, Unchanged), }; let target = fold_reconfiguration_target( in_flight.as_ref().map(|r| &r.target), @@ -1154,6 +1168,7 @@ impl Coordinator { size: plan.size.clone(), availability_zones: plan.availability_zones.clone(), logging, + arrangement_compression: plan.compute.arrangement_compression, replication_factor: plan.replication_factor, optimizer_feature_overrides: plan.optimizer_feature_overrides.clone(), schedule: plan.schedule.clone(), @@ -1363,7 +1378,10 @@ impl Coordinator { azs, false, )?, - compute: ComputeReplicaConfig { logging }, + compute: ComputeReplicaConfig { + logging, + arrangement_compression: compute.arrangement_compression, + }, }; // The caller pre-allocates `replica_id` out-of-band via the durable @@ -1525,7 +1543,10 @@ impl Coordinator { None, false, )?, - compute: ComputeReplicaConfig { logging }, + compute: ComputeReplicaConfig { + logging, + arrangement_compression: compute.arrangement_compression, + }, }; // Only orchestrated (managed-location) replicas have a size and size @@ -1643,7 +1664,10 @@ impl Coordinator { None, false, )?, - compute: ComputeReplicaConfig { logging }, + compute: ComputeReplicaConfig { + logging, + arrangement_compression: compute.arrangement_compression, + }, }; let cluster = self.catalog().get_cluster(cluster_id); @@ -1763,6 +1787,7 @@ impl Coordinator { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: _, schedule: _, @@ -1779,6 +1804,7 @@ impl Coordinator { let size = size.clone(); let availability_zones = availability_zones.clone(); let logging = logging.clone(); + let arrangement_compression = *arrangement_compression; let replication_factor = *replication_factor; let ClusterVariant::Managed(new_managed) = &new_config.variant else { panic!("expected new managed cluster config"); @@ -1788,6 +1814,7 @@ impl Coordinator { replication_factor: new_replication_factor, availability_zones: new_availability_zones, logging: new_logging, + arrangement_compression: new_arrangement_compression, optimizer_feature_overrides: _, schedule: _, auto_scaling_strategy: new_auto_scaling_strategy, @@ -1853,6 +1880,7 @@ impl Coordinator { debugging: new_logging.log_logging, interval, }), + arrangement_compression: *new_arrangement_compression, }; // Eagerly validate the `max_replicas_per_cluster` limit. @@ -1894,7 +1922,12 @@ impl Coordinator { // there burns those ids durably and throws them away. The controller // allocates its own when it materializes the change. let config_changed = new_managed.replica_config_shape() - != ManagedReplicaConfigShape::new(&size, &availability_zones, &logging); + != ManagedReplicaConfigShape::new( + &size, + &availability_zones, + &logging, + arrangement_compression, + ); let needed_replica_ids = if controller_owns { 0 } else if config_changed { @@ -1915,10 +1948,11 @@ impl Coordinator { // round-trip just to allocate nothing. let mut new_replica_ids = if needed_replica_ids > 0 { let id_ts = self.get_catalog_write_ts().await; - self.catalog() + let ids = self + .catalog() .allocate_replica_ids(cluster_id, u64::from(needed_replica_ids), id_ts) - .await? - .into_iter() + .await?; + ids.into_iter() } else { Vec::::new().into_iter() }; @@ -2148,6 +2182,7 @@ impl Coordinator { replication_factor: new_replication_factor, availability_zones: new_availability_zones, logging: _, + arrangement_compression: _, optimizer_feature_overrides: _, schedule: _, auto_scaling_strategy: _, @@ -2452,6 +2487,7 @@ struct ReconfigurationDimensionsUnchanged { availability_zones: bool, log_logging: bool, interval: bool, + arrangement_compression: bool, } /// Retains a stale in-progress reconfiguration record carried by a legacy-path @@ -2491,6 +2527,7 @@ fn alter_changes_replica_shape(options: &PlanClusterOption) -> bool { availability_zones, introspection_debugging, introspection_interval, + arrangement_compression, managed: _, replicas: _, replication_factor: _, @@ -2503,6 +2540,7 @@ fn alter_changes_replica_shape(options: &PlanClusterOption) -> bool { || !matches!(availability_zones, Unchanged) || !matches!(introspection_debugging, Unchanged) || !matches!(introspection_interval, Unchanged) + || !matches!(arrangement_compression, Unchanged) } /// Fold a new `ALTER` onto an in-flight reconfiguration target. @@ -2558,6 +2596,11 @@ fn fold_reconfiguration_target( new_target.logging.interval }, }, + arrangement_compression: if unchanged.arrangement_compression { + prev.arrangement_compression + } else { + new_target.arrangement_compression + }, } } @@ -2586,6 +2629,7 @@ mod tests { log_logging, interval: Some(DEFAULT_REPLICA_LOGGING_INTERVAL), }, + arrangement_compression: false, } } @@ -2596,6 +2640,7 @@ mod tests { availability_zones: false, log_logging: false, interval: false, + arrangement_compression: false, } } @@ -2606,6 +2651,7 @@ mod tests { availability_zones: true, log_logging: true, interval: true, + arrangement_compression: true, } } @@ -2632,6 +2678,7 @@ mod tests { availability_zones: true, log_logging: true, interval: true, + arrangement_compression: true, }; let folded = fold_reconfiguration_target(Some(&in_flight), new, unchanged); // The in-flight size/AZ/logging survive. Only rf is re-targeted. @@ -2675,6 +2722,7 @@ mod tests { availability_zones: true, log_logging: false, interval: true, + arrangement_compression: true, }; let folded = fold_reconfiguration_target(Some(&in_flight), new, unchanged); assert_eq!( diff --git a/src/adapter/src/coord/sequencer/inner/create_index.rs b/src/adapter/src/coord/sequencer/inner/create_index.rs index 888ed292d0ef3..249021981ab11 100644 --- a/src/adapter/src/coord/sequencer/inner/create_index.rs +++ b/src/adapter/src/coord/sequencer/inner/create_index.rs @@ -547,7 +547,7 @@ impl Coordinator { .set_physical_plan(global_id, df_desc.clone()); let notice_builtin_updates_fut = - coord.persist_dataflow_metainfo(df_meta, global_id).await; + coord.persist_dataflow_metainfo(df_meta, global_id); // We're putting in place read holds, such that ship_dataflow, // below, which calls update_read_capabilities, can successfully diff --git a/src/adapter/src/coord/sequencer/inner/create_materialized_view.rs b/src/adapter/src/coord/sequencer/inner/create_materialized_view.rs index bfa9f515f75d6..d986da63fd653 100644 --- a/src/adapter/src/coord/sequencer/inner/create_materialized_view.rs +++ b/src/adapter/src/coord/sequencer/inner/create_materialized_view.rs @@ -766,7 +766,7 @@ impl Coordinator { .set_physical_plan(global_id, df_desc.clone()); let notice_builtin_updates_fut = - coord.persist_dataflow_metainfo(df_meta, global_id).await; + coord.persist_dataflow_metainfo(df_meta, global_id); df_desc.set_as_of(dataflow_as_of.clone()); df_desc.set_initial_as_of(initial_as_of); diff --git a/src/adapter/src/coord/sql.rs b/src/adapter/src/coord/sql.rs index d38c6b3e76919..3be074ff30507 100644 --- a/src/adapter/src/coord/sql.rs +++ b/src/adapter/src/coord/sql.rs @@ -324,7 +324,8 @@ impl Coordinator { /// `mz_subscriptions` retraction is durable. The retraction is deferred to a group /// commit rather than committed inline, which would block the coordinator loop on a /// timestamp-oracle round trip. Callers that expose completion of the retirement - /// should wait on the notify off the loop before responding. The notify is already + /// should wait on the notify off the coordinator loop before responding. The notify is + /// already /// resolved for sinks that write no introspection row (internal subscribes and COPY TO). /// /// This is a low-level method. The caller is responsible for dropping the @@ -358,7 +359,8 @@ impl Coordinator { // Defer the retraction to a group commit, for the same reason we // defer the insert (see `add_active_compute_sink`): committing inline // would block the coordinator loop. Callers that expose the - // retirement wait on the notify off the loop before responding. + // retirement wait on the notify off the coordinator loop + // before responding. self.builtin_table_update().defer(vec![update]) } else { Box::pin(std::future::ready(())) diff --git a/src/adapter/src/coord/statement_logging.rs b/src/adapter/src/coord/statement_logging.rs index 092aed811a05e..3cf13bbfaa175 100644 --- a/src/adapter/src/coord/statement_logging.rs +++ b/src/adapter/src/coord/statement_logging.rs @@ -572,12 +572,23 @@ impl Coordinator { }); } - /// Set the `execution_timestamp` for a statement, once it's known + /// Sets the execution timestamp if the statement is still active. + /// + /// A duplicate end can race the asynchronous group-commit update, so an ended statement is + /// skipped rather than treated as corruption. pub(crate) fn set_statement_execution_timestamp( &mut self, id: StatementLoggingId, timestamp: Timestamp, ) { + let StatementLoggingId(uuid) = id; + if !self.statement_logging.executions_begun.contains_key(&uuid) { + tracing::warn!( + statement_uuid = %uuid, + "execution already ended, skipping execution timestamp update", + ); + return; + } self.mutate_record(id, |record| { record.execution_timestamp = Some(u64::from(timestamp)); }); diff --git a/src/adapter/src/coord/timeline.rs b/src/adapter/src/coord/timeline.rs index 665ebc27e73da..a6f1e74bf83ea 100644 --- a/src/adapter/src/coord/timeline.rs +++ b/src/adapter/src/coord/timeline.rs @@ -143,15 +143,7 @@ impl Coordinator { timestamp: Timestamp, ) -> impl Future + Send + 'static { let now = self.now().into(); - - let upper_bound = upper_bound(&now); - if timestamp > upper_bound { - error!( - %now, - "Setting local read timestamp to {timestamp}, which is more than \ - the desired upper bound {upper_bound}." - ); - } + check_runaway_write_ts(&now, timestamp); let oracle = self.get_local_timestamp_oracle(); @@ -279,8 +271,38 @@ impl Coordinator { became_empty } + /// Downgrades the [`EpochMilliseconds`](Timeline::EpochMilliseconds) timeline's read holds + /// to `read_ts`. + /// + /// `read_ts` must not exceed the local oracle's read frontier, i.e. it must come from the + /// oracle's `read_ts()` or from a write that was already applied with `apply_write`. + /// Downgrading past the oracle's read frontier could let compaction pass timestamps the + /// oracle can still serve reads at. + pub(crate) fn downgrade_local_read_holds(&mut self, read_ts: Timestamp) { + let TimelineState { read_holds, .. } = self + .global_timelines + .get_mut(&Timeline::EpochMilliseconds) + .expect("no realtime timeline"); + read_holds.downgrade(read_ts); + } + + /// Advances all timelines other than [`EpochMilliseconds`](Timeline::EpochMilliseconds) to + /// their objects' uppers and downgrades their read holds accordingly. + /// + /// The `EpochMilliseconds` oracle is advanced by group commits, so it is not touched here. + /// Its read holds are downgraded separately via [`Self::downgrade_local_read_holds`]. #[instrument(level = "debug")] - pub(crate) async fn advance_timelines(&mut self) { + pub(crate) async fn advance_custom_timelines(&mut self) { + // Common case: only the EpochMilliseconds timeline exists, nothing to do. + if !self + .global_timelines + .keys() + .any(|timeline| *timeline != Timeline::EpochMilliseconds) + { + return; + } + + // Take the map so we can call `&self` methods while mutating the timeline states. let global_timelines = std::mem::take(&mut self.global_timelines); for ( timeline, @@ -290,9 +312,12 @@ impl Coordinator { }, ) in global_timelines { - // Timeline::EpochMilliseconds is advanced in group commits and doesn't need to be - // manually advanced here. - if timeline != Timeline::EpochMilliseconds && !self.read_only_controllers { + if timeline == Timeline::EpochMilliseconds { + self.global_timelines + .insert(timeline, TimelineState { oracle, read_holds }); + continue; + } + if !self.read_only_controllers { // For non realtime sources, we define now as the largest timestamp, not in // advance of any object's upper. This is the largest timestamp that is closed // to writes. @@ -313,7 +338,7 @@ impl Coordinator { now, ); } - }; + } let read_ts = oracle.read_ts().await; read_holds.downgrade(read_ts); self.global_timelines @@ -331,6 +356,20 @@ fn upper_bound(now: &mz_repr::Timestamp) -> mz_repr::Timestamp { now.saturating_add(TIMESTAMP_INTERVAL_MS * TIMESTAMP_INTERVAL_UPPER_BOUND) } +/// Logs an error when `timestamp` is further ahead of `now` than a local write timestamp +/// should ever be, the signal that the `EpochMilliseconds` timeline has run away (e.g. after a +/// wall-clock regression). +pub(crate) fn check_runaway_write_ts(now: &mz_repr::Timestamp, timestamp: mz_repr::Timestamp) { + let upper_bound = upper_bound(now); + if timestamp > upper_bound { + error!( + %now, + "Setting local write timestamp to {timestamp}, which is more than \ + the desired upper bound {upper_bound}." + ); + } +} + /// Return the set of ids in a timedomain and verify timeline correctness. /// /// When a user starts a transaction, we need to prevent compaction of anything diff --git a/src/adapter/src/metrics.rs b/src/adapter/src/metrics.rs index 56b679d46e49b..446f73e1f8905 100644 --- a/src/adapter/src/metrics.rs +++ b/src/adapter/src/metrics.rs @@ -286,7 +286,7 @@ impl Metrics { )), group_commit_catalog_upper_seconds: registry.register(metric!( name: "mz_group_commit_catalog_upper_seconds", - help: "The time it takes to advance the catalog shard upper during group commit.", + help: "The time it takes to advance the catalog shard upper for a txns-shard write (group commits and table register/forget).", buckets: histogram_seconds_buckets(0.001, 32.0), )), } diff --git a/src/adapter/src/session.rs b/src/adapter/src/session.rs index 6b4d35d041976..9482dac94296c 100644 --- a/src/adapter/src/session.rs +++ b/src/adapter/src/session.rs @@ -1769,7 +1769,7 @@ impl WriteLocksBuilder { } } -/// Collection of [`WriteLocks`] gathered during [`group_commit`]. +/// Collection of [`WriteLocks`] gathered during [`stage_group_commit`]. /// /// Note: This struct should __never__ be used outside of group commit because it attempts to merge /// together several collections of [`WriteLocks`] which if not done carefully can cause deadlocks @@ -1816,7 +1816,7 @@ impl WriteLocksBuilder { /// For total order to exist, Ta < Tb < Tc < Ta, which is impossible. /// ``` /// -/// [`group_commit`]: super::coord::Coordinator::group_commit +/// [`stage_group_commit`]: super::coord::Coordinator::stage_group_commit #[derive(Debug, Default)] pub(crate) struct GroupCommitWriteLocks { locks: BTreeMap>, @@ -1832,6 +1832,15 @@ impl GroupCommitWriteLocks { self.locks.extend(existing); } + /// Absorbs a disjoint group-commit lock collection. + pub fn extend(&mut self, mut other: GroupCommitWriteLocks) { + assert!( + self.locks.keys().all(|id| !other.locks.contains_key(id)), + "separately staged group commits must have disjoint lock sets" + ); + self.locks.extend(std::mem::take(&mut other.locks)); + } + /// Returns the collections we're missing locks for, if any. pub fn missing_locks( &self, diff --git a/src/adapter/src/util.rs b/src/adapter/src/util.rs index 926b11422fb1e..ecdbdfde510d9 100644 --- a/src/adapter/src/util.rs +++ b/src/adapter/src/util.rs @@ -96,15 +96,18 @@ impl ClientTransmitter { otel_ctx: OpenTelemetryContext::obtain(), }) { - self.internal_cmd_tx - .send(Message::Command( - OpenTelemetryContext::obtain(), - Command::Terminate { - conn_id: res.session.conn_id().clone(), - tx: None, - }, - )) - .expect("coordinator unexpectedly gone"); + // If the coordinator is gone too, the process is shutting down and there is no + // session state left to clean up, so a failed send is fine. + let send_res = self.internal_cmd_tx.send(Message::Command( + OpenTelemetryContext::obtain(), + Command::Terminate { + conn_id: res.session.conn_id().clone(), + tx: None, + }, + )); + if send_res.is_err() { + tracing::warn!("coordinator gone, could not clean up session"); + } } } @@ -146,7 +149,9 @@ impl Transmittable for () { } } -/// `ClientTransmitter` with a response to send. +/// A pending write result and the context needed to deliver it. +/// +/// Dropping it uses the [`ExecuteContext`] retirement backstop. #[derive(Debug)] pub struct CompletedClientTransmitter { ctx: ExecuteContext, @@ -314,11 +319,13 @@ impl ShouldTerminateGracefully for DurableCatalogError { fn should_terminate_gracefully(&self) -> bool { match self { DurableCatalogError::Fence(err) => err.should_terminate_gracefully(), + DurableCatalogError::CatalogOutOfSync { .. } => true, DurableCatalogError::IncompatibleDataVersion { .. } | DurableCatalogError::IncompatiblePersistVersion { .. } | DurableCatalogError::Proto(_) | DurableCatalogError::Uninitialized | DurableCatalogError::NotWritable(_) + | DurableCatalogError::DryRunTransaction | DurableCatalogError::DuplicateKey | DurableCatalogError::UniquenessViolation | DurableCatalogError::Storage(_) diff --git a/src/catalog-protos/objects_hashes.json b/src/catalog-protos/objects_hashes.json index 11e5318e7a662..9d55f7fd37f34 100644 --- a/src/catalog-protos/objects_hashes.json +++ b/src/catalog-protos/objects_hashes.json @@ -1,7 +1,7 @@ [ { "name": "objects.rs", - "md5": "22c6fb5d20536bb409b0ec513db00d00" + "md5": "b661fcd073a04f5a5cfcead68f3f4ccf" }, { "name": "objects_v74.rs", @@ -66,5 +66,9 @@ { "name": "objects_v89.rs", "md5": "22c6fb5d20536bb409b0ec513db00d00" + }, + { + "name": "objects_v90.rs", + "md5": "b661fcd073a04f5a5cfcead68f3f4ccf" } ] diff --git a/src/catalog-protos/src/lib.rs b/src/catalog-protos/src/lib.rs index 696eec34aea9d..f81faa6e38f95 100644 --- a/src/catalog-protos/src/lib.rs +++ b/src/catalog-protos/src/lib.rs @@ -27,6 +27,7 @@ pub mod objects_v86; pub mod objects_v87; pub mod objects_v88; pub mod objects_v89; +pub mod objects_v90; pub mod serialization; /// The current version of the `Catalog`. @@ -34,7 +35,7 @@ pub mod serialization; /// We will initialize new `Catalog`s with this version, and migrate existing `Catalog`s to this /// version. Whenever the `Catalog` changes, e.g. the types we serialize in the `Catalog` /// change, we need to bump this version. -pub const CATALOG_VERSION: u64 = 89; +pub const CATALOG_VERSION: u64 = 90; /// The minimum `Catalog` version number that we support migrating from. /// diff --git a/src/catalog-protos/src/objects.rs b/src/catalog-protos/src/objects.rs index a7d76ee1f0a3c..df379bd2f27f0 100644 --- a/src/catalog-protos/src/objects.rs +++ b/src/catalog-protos/src/objects.rs @@ -923,6 +923,7 @@ pub struct ManagedCluster { pub replication_factor: u32, pub availability_zones: Vec, pub logging: ReplicaLogging, + pub arrangement_compression: bool, pub optimizer_feature_overrides: Vec, pub schedule: ClusterSchedule, /// User-configured autoscaling policy, distinct from the in-flight runtime @@ -1023,6 +1024,7 @@ pub struct ReconfigurationTarget { pub replication_factor: u32, pub availability_zones: Vec, pub logging: ReplicaLogging, + pub arrangement_compression: bool, } /// An active hydration burst. @@ -1041,6 +1043,7 @@ pub struct BurstState { pub struct ReplicaConfig { pub logging: ReplicaLogging, pub location: ReplicaLocation, + pub arrangement_compression: bool, } #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] diff --git a/src/catalog-protos/src/objects_v90.rs b/src/catalog-protos/src/objects_v90.rs new file mode 100644 index 0000000000000..df379bd2f27f0 --- /dev/null +++ b/src/catalog-protos/src/objects_v90.rs @@ -0,0 +1,2271 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +#[cfg(any(test, feature = "proptest"))] +use proptest_derive::Arbitrary; +use serde::{Deserialize, Serialize}; +use serde_repr::{Deserialize_repr, Serialize_repr}; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ConfigKey { + pub key: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ConfigValue { + pub value: u64, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SettingKey { + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SettingValue { + pub value: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct IdAllocKey { + pub name: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct IdAllocValue { + pub next_id: u64, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct GidMappingKey { + pub schema_name: String, + pub object_type: CatalogItemType, + pub object_name: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct GidMappingValue { + pub catalog_id: SystemCatalogItemId, + pub global_id: SystemGlobalId, + pub fingerprint: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterKey { + pub id: ClusterId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterValue { + pub name: String, + pub owner_id: RoleId, + pub privileges: Vec, + pub config: ClusterConfig, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterIntrospectionSourceIndexKey { + pub cluster_id: ClusterId, + pub name: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterIntrospectionSourceIndexValue { + pub catalog_id: IntrospectionSourceIndexCatalogItemId, + pub global_id: IntrospectionSourceIndexGlobalId, + pub oid: u32, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterReplicaKey { + pub id: ReplicaId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterReplicaValue { + pub cluster_id: ClusterId, + pub name: String, + pub config: ReplicaConfig, + pub owner_id: RoleId, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct DatabaseKey { + pub id: DatabaseId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct DatabaseValue { + pub name: String, + pub owner_id: RoleId, + pub privileges: Vec, + pub oid: u32, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SchemaKey { + pub id: SchemaId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SchemaValue { + pub database_id: Option, + pub name: String, + pub owner_id: RoleId, + pub privileges: Vec, + pub oid: u32, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ItemKey { + pub gid: CatalogItemId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ItemValue { + pub schema_id: SchemaId, + pub name: String, + pub definition: CatalogItem, + pub owner_id: RoleId, + pub privileges: Vec, + pub oid: u32, + pub global_id: GlobalId, + pub extra_versions: Vec, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ItemVersion { + pub global_id: GlobalId, + pub version: Version, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleKey { + pub id: RoleId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleValue { + pub name: String, + pub attributes: RoleAttributes, + pub membership: RoleMembership, + pub vars: RoleVars, + pub oid: u32, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleAuthKey { + pub id: RoleId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleAuthValue { + pub password_hash: Option, + pub updated_at: EpochMillis, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct NetworkPolicyKey { + pub id: NetworkPolicyId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct NetworkPolicyValue { + pub name: String, + pub rules: Vec, + pub owner_id: RoleId, + pub privileges: Vec, + pub oid: u32, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ServerConfigurationKey { + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ServerConfigurationValue { + pub value: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterSystemConfigurationKey { + pub cluster_id: ClusterId, + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterSystemConfigurationValue { + pub value: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReplicaSystemConfigurationKey { + pub replica_id: ReplicaId, + pub name: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReplicaSystemConfigurationValue { + pub value: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct AuditLogKey { + pub event: AuditLogEvent, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum AuditLogEvent { + V1(AuditLogEventV1), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct CommentKey { + pub object: CommentObject, + pub sub_component: Option, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum CommentObject { + Table(CatalogItemId), + View(CatalogItemId), + MaterializedView(CatalogItemId), + Source(CatalogItemId), + Sink(CatalogItemId), + Index(CatalogItemId), + Func(CatalogItemId), + Connection(CatalogItemId), + Type(CatalogItemId), + Secret(CatalogItemId), + Role(RoleId), + Database(DatabaseId), + Schema(ResolvedSchema), + Cluster(ClusterId), + ClusterReplica(ClusterReplicaId), + NetworkPolicy(NetworkPolicyId), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum CommentSubComponent { + ColumnPos(u64), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct CommentValue { + pub comment: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SourceReferencesKey { + pub source: CatalogItemId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SourceReferencesValue { + pub references: Vec, + pub updated_at: EpochMillis, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SourceReference { + pub name: String, + pub namespace: Option, + pub columns: Vec, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct StorageCollectionMetadataKey { + pub id: GlobalId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct StorageCollectionMetadataValue { + pub shard: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct UnfinalizedShardKey { + pub shard: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct TxnWalShardValue { + pub shard: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Empty {} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct StringWrapper { + pub inner: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Duration { + pub secs: u64, + pub nanos: u32, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct EpochMillis { + pub millis: u64, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Version { + pub value: u64, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum CatalogItem { + V1(CatalogItemV1), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct CatalogItemV1 { + pub create_sql: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum CatalogItemId { + System(u64), + User(u64), + Transient(u64), + IntrospectionSourceIndex(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SystemCatalogItemId(pub u64); + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct IntrospectionSourceIndexCatalogItemId(pub u64); + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum GlobalId { + System(u64), + User(u64), + Transient(u64), + Explain, + IntrospectionSourceIndex(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SystemGlobalId(pub u64); + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct IntrospectionSourceIndexGlobalId(pub u64); + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ClusterId { + System(u64), + User(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum DatabaseId { + System(u64), + User(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ResolvedDatabaseSpecifier { + Ambient, + Id(DatabaseId), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum SchemaId { + System(u64), + User(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum SchemaSpecifier { + Temporary, + Id(SchemaId), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ResolvedSchema { + pub database: ResolvedDatabaseSpecifier, + pub schema: SchemaSpecifier, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ReplicaId { + System(u64), + User(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterReplicaId { + pub cluster_id: ClusterId, + pub replica_id: ReplicaId, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum NetworkPolicyId { + System(u64), + User(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReplicaLogging { + pub log_logging: bool, + pub interval: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct OptimizerFeatureOverride { + pub name: String, + pub value: String, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterScheduleRefreshOptions { + pub rehydration_time_estimate: Duration, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ClusterSchedule { + Manual, + Refresh(ClusterScheduleRefreshOptions), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterConfig { + pub workload_class: Option, + pub variant: ClusterVariant, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ClusterVariant { + Unmanaged, + Managed(ManagedCluster), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ManagedCluster { + pub size: String, + pub replication_factor: u32, + pub availability_zones: Vec, + pub logging: ReplicaLogging, + pub arrangement_compression: bool, + pub optimizer_feature_overrides: Vec, + pub schedule: ClusterSchedule, + /// User-configured autoscaling policy, distinct from the in-flight runtime + /// records below. + pub auto_scaling_strategy: Option, + /// Latest graceful reconfiguration record, if one has been written. + pub reconfiguration: Option, + /// In-flight hydration burst the controller is running. + pub burst: Option, +} + +/// The user-configured autoscaling policy of a managed cluster. +/// +/// Extensible: future strategies are added as additional optional sub-policies. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct AutoScalingStrategy { + pub on_hydration: Option, +} + +/// The `ON HYDRATION` autoscaling sub-policy. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct OnHydration { + pub hydration_size: String, + pub linger_duration: Option, +} + +/// Latest graceful reconfiguration record, including the target shape, deadline, +/// timeout action, and lifecycle status. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReconfigurationState { + pub target: ReconfigurationTarget, + /// Deadline as an `mz_repr::Timestamp`. + pub deadline: u64, + /// What to do if the deadline passes before the target hydrates. + pub on_timeout: OnTimeoutAction, + pub status: ReconfigurationStatus, +} + +/// The lifecycle status of the latest graceful reconfiguration. +/// +/// NOTE: the serde serialization of these variant names is what the +/// `mz_internal.mz_cluster_reconfigurations` builtin view matches on. When +/// adding a variant, extend that view's `status` CASE mapping, or the new +/// variant surfaces verbatim (`SomeNewStatus`) instead of snake_case. +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ReconfigurationStatus { + InProgress, + Finalized, + TimedOut, + Cancelled, + ResourceExhausted, +} + +/// The action a graceful reconfiguration applies if its deadline passes before +/// the target replicas hydrate. Mirrors `mz_sql::plan::OnTimeoutAction`. +/// +/// NOTE: like `ReconfigurationStatus`, the serde variant names feed the +/// `on_timeout` CASE mapping in `mz_internal.mz_cluster_reconfigurations`. +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum OnTimeoutAction { + /// Cut over to the (not-yet-hydrated) target anyway. + Commit, + /// Drop the target replica set, reverting to the pre-reconfiguration shape. + Rollback, +} + +/// The full config shape a reconfiguration is moving the cluster to, so a +/// combined size + replication-factor + availability-zone change is one record. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReconfigurationTarget { + pub size: String, + pub replication_factor: u32, + pub availability_zones: Vec, + pub logging: ReplicaLogging, + pub arrangement_compression: bool, +} + +/// An active hydration burst. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct BurstState { + pub burst_size: String, + pub linger_duration: Duration, + /// When the steady-state replicas were first observed hydrated, as an + /// `mz_repr::Timestamp`. Absent until that observation. + pub steady_hydrated_at: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReplicaConfig { + pub logging: ReplicaLogging, + pub location: ReplicaLocation, + pub arrangement_compression: bool, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct UnmanagedLocation { + pub storagectl_addrs: Vec, + pub computectl_addrs: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ManagedLocation { + pub size: String, + /// The availability zones the replica was provisioned under. + /// + /// For a replica of a managed cluster this is the cluster's + /// `AVAILABILITY ZONES` pool at provision time; the cluster controller + /// compares it against a cluster's target `availability_zones` to tell + /// realized- from target-shape replicas (including an `AVAILABILITY ZONES` + /// divergence). For a replica of an unmanaged cluster it is the user-pinned + /// `AVAILABILITY ZONE`, as a zero- or one-element list. Empty when no zones + /// constrain placement. + pub availability_zones: Vec, + pub internal: bool, + pub billed_as: Option, + pub pending: bool, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum ReplicaLocation { + Unmanaged(UnmanagedLocation), + Managed(ManagedLocation), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum RoleId { + System(u64), + User(u64), + Public, + Predefined(u64), +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum AutoProvisionSource { + Oidc = 0, + Frontegg = 1, + None = 2, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleAttributes { + pub inherit: bool, + pub superuser: Option, + pub login: Option, + pub auto_provision_source: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleMembership { + pub map: Vec, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleMembershipEntry { + pub key: RoleId, + pub value: RoleId, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleVars { + pub entries: Vec, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleVarsEntry { + pub key: String, + pub val: RoleVar, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum RoleVar { + Flat(String), + SqlSet(Vec), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct NetworkPolicyRule { + pub name: String, + pub address: String, + pub action: NetworkPolicyRuleAction, + pub direction: NetworkPolicyRuleDirection, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum NetworkPolicyRuleAction { + Allow, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub enum NetworkPolicyRuleDirection { + Ingress, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct AclMode { + pub bitflags: u64, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct MzAclItem { + pub grantee: RoleId, + pub grantor: RoleId, + pub acl_mode: AclMode, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct DefaultPrivilegesKey { + pub role_id: RoleId, + pub database_id: Option, + pub schema_id: Option, + pub object_type: ObjectType, + pub grantee: RoleId, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct DefaultPrivilegesValue { + pub privileges: AclMode, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SystemPrivilegesKey { + pub grantee: RoleId, + pub grantor: RoleId, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SystemPrivilegesValue { + pub acl_mode: AclMode, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct AuditLogEventV1 { + pub id: u64, + pub event_type: audit_log_event_v1::EventType, + pub object_type: audit_log_event_v1::ObjectType, + pub user: Option, + pub occurred_at: EpochMillis, + pub details: audit_log_event_v1::Details, +} + +pub mod audit_log_event_v1 { + use super::*; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct IdFullNameV1 { + pub id: String, + pub name: FullNameV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct FullNameV1 { + pub database: String, + pub schema: String, + pub item: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct IdNameV1 { + pub id: String, + pub name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RenameClusterV1 { + pub id: String, + pub old_name: String, + pub new_name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RenameClusterReplicaV1 { + pub cluster_id: String, + pub replica_id: String, + pub old_name: String, + pub new_name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterClusterReconfigurationV1 { + pub cluster_id: String, + pub cluster_name: String, + pub transition: ReconfigurationLifecycleV1, + /// On a `finalized` transition: whether the cut-over was forced by `ON + /// TIMEOUT COMMIT` at the deadline rather than reached by hydration. + #[serde(default)] + pub forced: Option, + pub target_size: String, + pub target_replication_factor: u32, + pub target_availability_zones: Vec, + pub target_logging: ClusterReplicaLoggingV1, + pub deadline: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct ClusterReplicaLoggingV1 { + pub log_logging: bool, + pub interval: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct ReconfigurationLifecycleV1 { + pub transition: reconfiguration_lifecycle_v1::Transition, + } + + pub mod reconfiguration_lifecycle_v1 { + use super::*; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum Transition { + Started(Empty), + Finalized(Empty), + TimedOut(Empty), + Cancelled(Empty), + ResourceExhausted(Empty), + } + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct ClusterHydrationBurstV1 { + pub cluster_id: String, + pub cluster_name: String, + pub transition: HydrationBurstLifecycleV1, + /// On a `finished` transition: why the burst tore down. + #[serde(default)] + pub finish_cause: Option, + pub burst_size: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct HydrationBurstLifecycleV1 { + pub transition: hydration_burst_lifecycle_v1::Transition, + } + + pub mod hydration_burst_lifecycle_v1 { + use super::*; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum Transition { + Started(Empty), + Finished(Empty), + } + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct BurstFinishCauseV1 { + pub cause: burst_finish_cause_v1::Cause, + } + + pub mod burst_finish_cause_v1 { + use super::*; + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum Cause { + LingerElapsed(Empty), + NoLongerWarranted(Empty), + } + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RenameItemV1 { + pub id: String, + pub old_name: FullNameV1, + pub new_name: FullNameV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateClusterReplicaV1 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub logical_size: String, + pub disk: bool, + pub billed_as: Option, + pub internal: bool, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateClusterReplicaV2 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub logical_size: String, + pub disk: bool, + pub billed_as: Option, + pub internal: bool, + pub reason: CreateOrDropClusterReplicaReasonV1, + pub scheduling_policies: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateClusterReplicaV3 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub logical_size: String, + pub disk: bool, + pub billed_as: Option, + pub internal: bool, + pub reason: CreateOrDropClusterReplicaReasonV1, + pub scheduling_policies: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateClusterReplicaV4 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub logical_size: String, + pub billed_as: Option, + pub internal: bool, + pub reason: CreateOrDropClusterReplicaReasonV1, + pub scheduling_policies: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct DropClusterReplicaV1 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct DropClusterReplicaV2 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub reason: CreateOrDropClusterReplicaReasonV1, + pub scheduling_policies: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct DropClusterReplicaV3 { + pub cluster_id: String, + pub cluster_name: String, + pub replica_id: Option, + pub replica_name: String, + pub reason: CreateOrDropClusterReplicaReasonV1, + pub scheduling_policies: Option, + } + + #[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize + )] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateOrDropClusterReplicaReasonV1 { + pub reason: CreateOrDropClusterReplicaReasonV1Reason, + } + + #[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize + )] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum CreateOrDropClusterReplicaReasonV1Reason { + Manual(Empty), + Schedule(Empty), + System(Empty), + Reconfiguration(Empty), + HydrationBurst(Empty), + Retired(Empty), + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct SchedulingDecisionsWithReasonsV1 { + pub on_refresh: RefreshDecisionWithReasonV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct SchedulingDecisionsWithReasonsV2 { + pub on_refresh: RefreshDecisionWithReasonV2, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum RefreshDecision { + On(Empty), + Off(Empty), + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RefreshDecisionWithReasonV1 { + pub objects_needing_refresh: Vec, + pub rehydration_time_estimate: String, + pub decision: RefreshDecision, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RefreshDecisionWithReasonV2 { + pub objects_needing_refresh: Vec, + pub objects_needing_compaction: Vec, + pub rehydration_time_estimate: String, + pub decision: RefreshDecision, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateSourceSinkV1 { + pub id: String, + pub name: FullNameV1, + pub size: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateSourceSinkV2 { + pub id: String, + pub name: FullNameV1, + pub size: Option, + pub external_type: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateSourceSinkV3 { + pub id: String, + pub name: FullNameV1, + pub external_type: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateSourceSinkV4 { + pub id: String, + pub cluster_id: Option, + pub name: FullNameV1, + pub external_type: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateIndexV1 { + pub id: String, + pub cluster_id: String, + pub name: FullNameV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateMaterializedViewV1 { + pub id: String, + pub cluster_id: String, + pub name: FullNameV1, + pub replacement_target_id: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterApplyReplacementV1 { + pub target: IdFullNameV1, + pub replacement: IdFullNameV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterSourceSinkV1 { + pub id: String, + pub name: FullNameV1, + pub old_size: Option, + pub new_size: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterSetClusterV1 { + pub id: String, + pub name: FullNameV1, + pub old_cluster_id: String, + pub new_cluster_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct GrantRoleV1 { + pub role_id: String, + pub member_id: String, + pub grantor_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct GrantRoleV2 { + pub role_id: String, + pub member_id: String, + pub grantor_id: String, + pub executed_by: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RevokeRoleV1 { + pub role_id: String, + pub member_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RevokeRoleV2 { + pub role_id: String, + pub member_id: String, + pub grantor_id: String, + pub executed_by: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct UpdatePrivilegeV1 { + pub object_id: String, + pub grantee_id: String, + pub grantor_id: String, + pub privileges: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterDefaultPrivilegeV1 { + pub role_id: String, + pub database_id: Option, + pub schema_id: Option, + pub grantee_id: String, + pub privileges: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct UpdateOwnerV1 { + pub object_id: String, + pub old_owner_id: String, + pub new_owner_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct SchemaV1 { + pub id: String, + pub name: String, + pub database_name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct SchemaV2 { + pub id: String, + pub name: String, + pub database_name: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RenameSchemaV1 { + pub id: String, + pub database_name: Option, + pub old_name: String, + pub new_name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct UpdateItemV1 { + pub id: String, + pub name: FullNameV1, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterRetainHistoryV1 { + pub id: String, + pub old_history: Option, + pub new_history: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterAddColumnV1 { + pub id: String, + pub column: String, + pub column_type: String, + pub nullable: bool, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct AlterSourceTimestampIntervalV1 { + pub id: String, + pub old_interval: Option, + pub new_interval: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct ToNewIdV1 { + pub id: String, + pub new_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct FromPreviousIdV1 { + pub id: String, + pub previous_id: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct SetV1 { + pub name: String, + pub value: Option, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct RotateKeysV1 { + pub id: String, + pub name: String, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub struct CreateRoleV1 { + pub id: String, + pub name: String, + pub auto_provision_source: Option, + } + + #[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + Serialize_repr, + Deserialize_repr + )] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + #[repr(u8)] + pub enum EventType { + Unknown = 0, + Create = 1, + Drop = 2, + Alter = 3, + Grant = 4, + Revoke = 5, + Comment = 6, + } + + #[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + Serialize_repr, + Deserialize_repr + )] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + #[repr(u8)] + pub enum ObjectType { + Unknown = 0, + Cluster = 1, + ClusterReplica = 2, + Connection = 3, + Database = 4, + Func = 5, + Index = 6, + MaterializedView = 7, + Role = 8, + Secret = 9, + Schema = 10, + Sink = 11, + Source = 12, + Table = 13, + Type = 14, + View = 15, + System = 16, + ContinualTask = 17, + NetworkPolicy = 18, + } + + #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] + #[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] + pub enum Details { + CreateClusterReplicaV1(CreateClusterReplicaV1), + CreateClusterReplicaV2(CreateClusterReplicaV2), + CreateClusterReplicaV3(CreateClusterReplicaV3), + CreateClusterReplicaV4(CreateClusterReplicaV4), + DropClusterReplicaV1(DropClusterReplicaV1), + DropClusterReplicaV2(DropClusterReplicaV2), + DropClusterReplicaV3(DropClusterReplicaV3), + CreateSourceSinkV1(CreateSourceSinkV1), + CreateSourceSinkV2(CreateSourceSinkV2), + AlterSourceSinkV1(AlterSourceSinkV1), + AlterSetClusterV1(AlterSetClusterV1), + GrantRoleV1(GrantRoleV1), + GrantRoleV2(GrantRoleV2), + RevokeRoleV1(RevokeRoleV1), + RevokeRoleV2(RevokeRoleV2), + UpdatePrivilegeV1(UpdatePrivilegeV1), + AlterDefaultPrivilegeV1(AlterDefaultPrivilegeV1), + UpdateOwnerV1(UpdateOwnerV1), + IdFullNameV1(IdFullNameV1), + RenameClusterV1(RenameClusterV1), + RenameClusterReplicaV1(RenameClusterReplicaV1), + RenameItemV1(RenameItemV1), + IdNameV1(IdNameV1), + SchemaV1(SchemaV1), + SchemaV2(SchemaV2), + RenameSchemaV1(RenameSchemaV1), + UpdateItemV1(UpdateItemV1), + CreateSourceSinkV3(CreateSourceSinkV3), + AlterRetainHistoryV1(AlterRetainHistoryV1), + ToNewIdV1(ToNewIdV1), + FromPreviousIdV1(FromPreviousIdV1), + SetV1(SetV1), + ResetAllV1(Empty), + RotateKeysV1(RotateKeysV1), + CreateSourceSinkV4(CreateSourceSinkV4), + CreateIndexV1(CreateIndexV1), + CreateMaterializedViewV1(CreateMaterializedViewV1), + AlterApplyReplacementV1(AlterApplyReplacementV1), + CreateRoleV1(CreateRoleV1), + AlterAddColumnV1(AlterAddColumnV1), + AlterSourceTimestampIntervalV1(AlterSourceTimestampIntervalV1), + AlterClusterReconfigurationV1(AlterClusterReconfigurationV1), + ClusterHydrationBurstV1(ClusterHydrationBurstV1), + } +} + +/// The contents of a single state update. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +// Serialize the top-level enum in the persist-backed catalog as internally tagged to set up +// persist pushdown statistics for success. +#[serde(tag = "kind")] +pub enum StateUpdateKind { + AuditLog(AuditLog), + Cluster(Cluster), + ClusterIntrospectionSourceIndex(ClusterIntrospectionSourceIndex), + ClusterReplica(ClusterReplica), + Comment(Comment), + Config(Config), + Database(Database), + DefaultPrivileges(DefaultPrivileges), + FenceToken(FenceToken), + GidMapping(GidMapping), + IdAlloc(IdAlloc), + Item(Item), + NetworkPolicy(NetworkPolicy), + Role(Role), + RoleAuth(RoleAuth), + Schema(Schema), + ServerConfiguration(ServerConfiguration), + ClusterSystemConfiguration(ClusterSystemConfiguration), + ReplicaSystemConfiguration(ReplicaSystemConfiguration), + Setting(Setting), + SourceReferences(SourceReferences), + StorageCollectionMetadata(StorageCollectionMetadata), + SystemPrivileges(SystemPrivileges), + TxnWalShard(TxnWalShard), + UnfinalizedShard(UnfinalizedShard), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct AuditLog { + pub key: AuditLogKey, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Cluster { + pub key: ClusterKey, + pub value: ClusterValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterReplica { + pub key: ClusterReplicaKey, + pub value: ClusterReplicaValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Comment { + pub key: CommentKey, + pub value: CommentValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Config { + pub key: ConfigKey, + pub value: ConfigValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Database { + pub key: DatabaseKey, + pub value: DatabaseValue, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct DefaultPrivileges { + pub key: DefaultPrivilegesKey, + pub value: DefaultPrivilegesValue, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct FenceToken { + pub deploy_generation: u64, + pub epoch: i64, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct IdAlloc { + pub key: IdAllocKey, + pub value: IdAllocValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterIntrospectionSourceIndex { + pub key: ClusterIntrospectionSourceIndexKey, + pub value: ClusterIntrospectionSourceIndexValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Item { + pub key: ItemKey, + pub value: ItemValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Role { + pub key: RoleKey, + pub value: RoleValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct RoleAuth { + pub key: RoleAuthKey, + pub value: RoleAuthValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct NetworkPolicy { + pub key: NetworkPolicyKey, + pub value: NetworkPolicyValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Schema { + pub key: SchemaKey, + pub value: SchemaValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct Setting { + pub key: SettingKey, + pub value: SettingValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ServerConfiguration { + pub key: ServerConfigurationKey, + pub value: ServerConfigurationValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ClusterSystemConfiguration { + pub key: ClusterSystemConfigurationKey, + pub value: ClusterSystemConfigurationValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct ReplicaSystemConfiguration { + pub key: ReplicaSystemConfigurationKey, + pub value: ReplicaSystemConfigurationValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SourceReferences { + pub key: SourceReferencesKey, + pub value: SourceReferencesValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct GidMapping { + pub key: GidMappingKey, + pub value: GidMappingValue, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct SystemPrivileges { + pub key: SystemPrivilegesKey, + pub value: SystemPrivilegesValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct StorageCollectionMetadata { + pub key: StorageCollectionMetadataKey, + pub value: StorageCollectionMetadataValue, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct UnfinalizedShard { + pub key: UnfinalizedShardKey, +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +pub struct TxnWalShard { + pub value: TxnWalShardValue, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + Serialize_repr, + Deserialize_repr +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +#[repr(u8)] +pub enum CatalogItemType { + Unknown = 0, + Table = 1, + Source = 2, + Sink = 3, + View = 4, + MaterializedView = 5, + Index = 6, + Type = 7, + Func = 8, + Secret = 9, + Connection = 10, +} + +#[derive( + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + PartialOrd, + Ord, + Serialize_repr, + Deserialize_repr +)] +#[cfg_attr(any(test, feature = "proptest"), derive(Arbitrary))] +#[repr(u8)] +pub enum ObjectType { + Unknown = 0, + Table = 1, + View = 2, + MaterializedView = 3, + Source = 4, + Sink = 5, + Index = 6, + Type = 7, + Role = 8, + Cluster = 9, + ClusterReplica = 10, + Secret = 11, + Connection = 12, + Database = 13, + Schema = 14, + Func = 15, + NetworkPolicy = 17, +} diff --git a/src/catalog/src/durable.rs b/src/catalog/src/durable.rs index f5971e0c52bc3..2ad4462147682 100644 --- a/src/catalog/src/durable.rs +++ b/src/catalog/src/durable.rs @@ -12,7 +12,7 @@ use std::fmt::Debug; use std::num::NonZeroI64; use std::sync::Arc; -use std::time::{Duration, Instant}; +use std::time::Duration; use async_trait::async_trait; use mz_audit_log::VersionedEvent; @@ -41,8 +41,8 @@ pub use crate::durable::objects::{ }; pub use crate::durable::persist::shard_id; use crate::durable::persist::{Timestamp, UnopenedPersistCatalogState}; -pub use crate::durable::transaction::Transaction; use crate::durable::transaction::TransactionBatch; +pub use crate::durable::transaction::{DryRunTransaction, Transaction}; pub use crate::durable::upgrade::CATALOG_VERSION; use crate::memory; @@ -274,6 +274,12 @@ pub trait ReadOnlyDurableCatalogState: Debug + Send + Sync { target_upper: Timestamp, ) -> Result, CatalogError>; + /// Checks for unapplied catalog content before `target_upper` without consuming it. + /// + /// Returns an error if this instance has been fenced out. + async fn ensure_not_out_of_sync(&mut self, target_upper: Timestamp) + -> Result<(), CatalogError>; + /// Fetch the current upper of the catalog state. async fn current_upper(&mut self) -> Timestamp; } @@ -291,18 +297,18 @@ pub trait DurableCatalogState: ReadOnlyDurableCatalogState { /// Marks the bootstrap process as complete. async fn mark_bootstrap_complete(&mut self); - /// Creates a new durable catalog state transaction. + /// Creates a transaction only if no durable catalog content is pending. + /// + /// Empty upper progress is accepted. async fn transaction(&mut self) -> Result; - /// Creates a new transaction initialized from the given [`Snapshot`] - /// instead of reading from durable storage. Used for incremental DDL - /// dry runs where the transaction state from a previous dry run has been - /// saved and needs to be restored so it stays in sync with the accumulated - /// `CatalogState`. + /// Creates a non-committable dry-run transaction from the given [`Snapshot`]. + /// + /// The snapshot may include changes accumulated by earlier incremental dry runs. fn transaction_from_snapshot( &mut self, snapshot: Snapshot, - ) -> Result; + ) -> Result; /// Commits a durable catalog state transaction. The transaction will be committed at /// `commit_ts`. @@ -317,34 +323,23 @@ pub trait DurableCatalogState: ReadOnlyDurableCatalogState { commit_ts: Timestamp, ) -> Result; - /// Advances the upper of the catalog shard to `new_upper`. + /// Advances the catalog upper to at least `new_upper`. /// - /// This implicitly confirms leadership, as attempting to advance the catalog frontier will - /// fail if the writer has been fenced out. + /// A durable attempt observes fencing and reports concurrent non-fencing content as + /// [`DurableCatalogError::CatalogOutOfSync`]. A no-op only validates a fence already observed + /// by this handle. async fn advance_upper(&mut self, new_upper: Timestamp) -> Result<(), CatalogError>; /// Allocates and returns `amount` IDs of `id_type`. /// - /// See [`Self::commit_transaction`] for details on `commit_ts`. - #[mz_ore::instrument(level = "debug")] + /// Allocation rebases over empty upper progress. Fresh IDs do not require a catalog + /// staleness check. async fn allocate_id( &mut self, id_type: &str, amount: u64, commit_ts: Timestamp, - ) -> Result, CatalogError> { - let start = Instant::now(); - if amount == 0 { - return Ok(Vec::new()); - } - let mut txn = self.transaction().await?; - let ids = txn.get_and_increment_id_by(id_type.to_string(), amount)?; - txn.commit_internal(commit_ts).await?; - self.metrics() - .allocate_id_seconds - .observe(start.elapsed().as_secs_f64()); - Ok(ids) - } + ) -> Result, CatalogError>; /// Allocates and returns `amount` many user [`CatalogItemId`] and [`GlobalId`]. /// diff --git a/src/catalog/src/durable/error.rs b/src/catalog/src/durable/error.rs index 9fb9df1c86b51..f2a9cc3dadb07 100644 --- a/src/catalog/src/durable/error.rs +++ b/src/catalog/src/durable/error.rs @@ -68,6 +68,9 @@ pub enum DurableCatalogError { /// Catalog is not in a writable state. #[error("{0}")] NotWritable(String), + /// A dry-run transaction reached a commit path. + #[error("cannot commit a dry-run catalog transaction")] + DryRunTransaction, /// Unable to serialize/deserialize Protobuf message. #[error("proto: {0}")] Proto(TryFromProtoError), @@ -80,6 +83,16 @@ pub enum DurableCatalogError { /// A programming error occurred during a [`mz_storage_client::controller::StorageTxn`]. #[error(transparent)] Storage(StorageError), + /// The durable catalog contains updates that this process has not applied. + /// + /// NOTE: `update_count` counts raw durable updates when produced by the write-conflict + /// classification (commit and advance paths) but memory updates when produced by + /// `ensure_not_out_of_sync`. It is diagnostic only, do not compare across producers. + #[error("durable catalog advanced to {upper} with {update_count} unapplied updates")] + CatalogOutOfSync { + update_count: usize, + upper: Timestamp, + }, /// An internal programming error. #[error("Internal catalog error: {0}")] Internal(String), diff --git a/src/catalog/src/durable/initialize.rs b/src/catalog/src/durable/initialize.rs index 7ded07f91dc8e..f7011c0dc1a65 100644 --- a/src/catalog/src/durable/initialize.rs +++ b/src/catalog/src/durable/initialize.rs @@ -790,6 +790,7 @@ fn default_cluster_config(args: &BootstrapArgs) -> Result Result, pub logging: ReplicaLogging, + /// Whether arrangements on this cluster's replicas request dictionary compression. + pub arrangement_compression: bool, pub replication_factor: u32, pub optimizer_feature_overrides: BTreeMap, pub schedule: ClusterSchedule, @@ -410,6 +412,7 @@ pub struct ReconfigurationTarget { pub replication_factor: u32, pub availability_zones: Vec, pub logging: ReplicaLogging, + pub arrangement_compression: bool, } /// An active hydration burst the controller is running. @@ -524,6 +527,7 @@ impl DurableType for ClusterReplica { pub struct ReplicaConfig { pub location: ReplicaLocation, pub logging: ReplicaLogging, + pub arrangement_compression: bool, } impl From for ReplicaConfig { @@ -531,6 +535,7 @@ impl From for ReplicaConfig { Self { location: config.location.into(), logging: config.compute.logging, + arrangement_compression: config.compute.arrangement_compression, } } } diff --git a/src/catalog/src/durable/objects/serialization.rs b/src/catalog/src/durable/objects/serialization.rs index fc8c061de7c9e..345d0b31ed742 100644 --- a/src/catalog/src/durable/objects/serialization.rs +++ b/src/catalog/src/durable/objects/serialization.rs @@ -75,6 +75,7 @@ impl RustType for ClusterVariant { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides, schedule, @@ -85,6 +86,7 @@ impl RustType for ClusterVariant { size: size.to_string(), availability_zones: availability_zones.clone(), logging: logging.into_proto(), + arrangement_compression: *arrangement_compression, replication_factor: *replication_factor, optimizer_feature_overrides: optimizer_feature_overrides.into_proto(), schedule: schedule.into_proto(), @@ -103,6 +105,7 @@ impl RustType for ClusterVariant { size: managed.size, availability_zones: managed.availability_zones, logging: managed.logging.into_rust()?, + arrangement_compression: managed.arrangement_compression, replication_factor: managed.replication_factor, optimizer_feature_overrides: managed.optimizer_feature_overrides.into_rust()?, schedule: managed.schedule.into_rust()?, @@ -167,6 +170,7 @@ impl RustType for ReconfigurationTarget { replication_factor: self.replication_factor, availability_zones: self.availability_zones.clone(), logging: self.logging.into_proto(), + arrangement_compression: self.arrangement_compression, } } @@ -176,6 +180,7 @@ impl RustType for ReconfigurationTarget { replication_factor: proto.replication_factor, availability_zones: proto.availability_zones, logging: proto.logging.into_rust()?, + arrangement_compression: proto.arrangement_compression, }) } } @@ -203,6 +208,7 @@ impl RustType for ReplicaConfig { proto::ReplicaConfig { logging: self.logging.into_proto(), location: self.location.into_proto(), + arrangement_compression: self.arrangement_compression, } } @@ -210,6 +216,7 @@ impl RustType for ReplicaConfig { Ok(ReplicaConfig { location: proto.location.into_rust()?, logging: proto.logging.into_rust()?, + arrangement_compression: proto.arrangement_compression, }) } } diff --git a/src/catalog/src/durable/objects/state_update.rs b/src/catalog/src/durable/objects/state_update.rs index 30ef511b00f82..d53783d724350 100644 --- a/src/catalog/src/durable/objects/state_update.rs +++ b/src/catalog/src/durable/objects/state_update.rs @@ -157,6 +157,7 @@ impl StateUpdate { txn_wal_shard, audit_log_updates, upper: _, + .. } = txn_batch; let databases = from_batch(databases, StateUpdateKind::Database); let schemas = from_batch(schemas, StateUpdateKind::Schema); diff --git a/src/catalog/src/durable/persist.rs b/src/catalog/src/durable/persist.rs index 9f50aa3cc237b..eccb49f1ddb07 100644 --- a/src/catalog/src/durable/persist.rs +++ b/src/catalog/src/durable/persist.rs @@ -22,6 +22,7 @@ use differential_dataflow::lattice::Lattice; use futures::{FutureExt, StreamExt}; use itertools::Itertools; use mz_audit_log::VersionedEvent; +use mz_ore::cast::CastFrom; use mz_ore::metrics::MetricsFutureExt; use mz_ore::now::EpochMillis; use mz_ore::{ @@ -61,9 +62,9 @@ use crate::durable::objects::{AuditLogKey, FenceToken, Snapshot}; use crate::durable::transaction::TransactionBatch; use crate::durable::upgrade::upgrade; use crate::durable::{ - BootstrapArgs, CATALOG_CONTENT_VERSION_KEY, CatalogError, DurableCatalogError, - DurableCatalogState, Epoch, OpenableDurableCatalogState, ReadOnlyDurableCatalogState, - Transaction, initialize, persist_desc, + BootstrapArgs, CATALOG_CONTENT_VERSION_KEY, CatalogError, DryRunTransaction, + DurableCatalogError, DurableCatalogState, Epoch, OpenableDurableCatalogState, + ReadOnlyDurableCatalogState, Transaction, initialize, persist_desc, }; use crate::memory; @@ -278,8 +279,10 @@ impl FenceableToken { pub(crate) enum CompareAndAppendError { #[error(transparent)] Fence(#[from] FenceError), - /// Catalog encountered an upper mismatch when trying to write to the catalog. This should only - /// happen while trying to fence out other catalogs. + /// Catalog encountered an upper mismatch when trying to write to the catalog: another + /// writer moved the upper between our snapshot of it and the write. Handled by the conflict + /// classification in the commit and advance paths (rebase over empty progress, surface + /// content conflicts as out-of-sync). #[error( "expected catalog upper {expected_upper:?} did not match actual catalog upper {actual_upper:?}" )] @@ -368,6 +371,11 @@ pub(crate) struct PersistHandle> { /// [`Self::maybe_consolidate`] to decide when to consolidate. Initialized /// lazily on the first call. size_at_last_consolidation: Option, + /// Counts raw updates applied to this handle. + /// + /// This distinguishes empty upper progress from content. Memory updates are insufficient + /// because kinds such as ID allocators do not produce them. + updates_applied: u64, } impl> PersistHandle { @@ -392,28 +400,6 @@ impl> PersistHandle { updates: Vec<(S, Diff)>, commit_ts: Timestamp, ) -> Result { - // The fencing check is expensive, so run it only with soft assertions enabled. - let contains_fence = if mz_ore::assert::soft_assertions_enabled() { - let parsed_updates: Vec<_> = updates - .clone() - .into_iter() - .filter_map(|(update, diff)| { - let update: StateUpdateKindJson = update.into(); - let update = TryIntoStateUpdateKind::try_into(update).ok()?; - Some((update, diff)) - }) - .collect(); - let contains_retraction = parsed_updates.iter().any(|(update, diff)| { - matches!(update, StateUpdateKind::FenceToken(..)) && *diff == Diff::MINUS_ONE - }); - let contains_addition = parsed_updates.iter().any(|(update, diff)| { - matches!(update, StateUpdateKind::FenceToken(..)) && *diff == Diff::ONE - }); - Some(contains_retraction && contains_addition) - } else { - None - }; - let updates = updates.into_iter().map(|(kind, diff)| { let kind: StateUpdateKindJson = kind.into(); ( @@ -423,20 +409,8 @@ impl> PersistHandle { ) }); let next_upper = commit_ts.step_forward(); - self.compare_and_append_inner(updates, next_upper) - .await - .inspect_err(|e| { - // A compare-and-append failure means someone else must have written to the - // catalog. We expect to have been fenced out, since writing to the catalog without - // fencing other catalogs should be impossible. The one exception is if we are - // trying to fence other catalogs with this write. - if let Some(contains_fence) = contains_fence { - soft_assert_or_log!( - matches!(e, CompareAndAppendError::Fence(_)) || contains_fence, - "encountered an upper mismatch on a non-fencing write" - ); - } - })?; + // Upper mismatches are classified by the commit and advance callers. + self.compare_and_append_inner(updates, next_upper).await?; self.sync(next_upper).await?; Ok(next_upper) @@ -499,6 +473,25 @@ impl> PersistHandle { Ok(()) } + /// Accepts an upper mismatch caused only by empty progress. + /// + /// `updates_applied_before` must be captured before the compare-and-append, which synchronizes + /// this handle on mismatch. + fn classify_upper_mismatch( + &self, + updates_applied_before: u64, + actual_upper: Timestamp, + ) -> Result<(), DurableCatalogError> { + if self.updates_applied != updates_applied_before { + Err(DurableCatalogError::CatalogOutOfSync { + update_count: usize::cast_from(self.updates_applied - updates_applied_before), + upper: actual_upper, + }) + } else { + Ok(()) + } + } + /// Generates an iterator of [`StateUpdate`] that contain all unconsolidated updates to the /// catalog state up to, and including, `as_of`. #[mz_ore::instrument] @@ -655,6 +648,7 @@ impl> PersistHandle { if diff != Diff::ONE && diff != Diff::MINUS_ONE { panic!("invalid update in consolidated trace: ({kind:?}, {ts:?}, {diff:?})"); } + self.updates_applied += 1; match self.update_applier.apply_update( StateUpdate { kind, ts, diff }, @@ -1097,6 +1091,7 @@ impl UnopenedPersistCatalogState { bootstrap_complete: false, metrics, size_at_last_consolidation: None, + updates_applied: 0, }; // If the snapshot is not consolidated, and we see multiple epoch values while applying the // updates, then we might accidentally fence ourselves out. @@ -1297,6 +1292,7 @@ impl UnopenedPersistCatalogState { bootstrap_complete: false, metrics: self.metrics, size_at_last_consolidation: None, + updates_applied: 0, }; catalog.metrics.collection_entries.reset(); // Normally, `collection_entries` is updated in `apply_updates`. The audit log updates skip @@ -1314,7 +1310,7 @@ impl UnopenedPersistCatalogState { let catalog_content_version = catalog.catalog_content_version.to_string(); let txn = if is_initialized { - let mut txn = catalog.transaction().await?; + let mut txn = catalog.transaction_unchecked().await?; // Ad-hoc migration: Initialize the `migration_version` expected by adapter to be // present in existing catalogs. @@ -1341,7 +1337,7 @@ impl UnopenedPersistCatalogState { catalog.snapshot ); - let mut txn = catalog.transaction().await?; + let mut txn = catalog.transaction_unchecked().await?; initialize::initialize( &mut txn, bootstrap_args, @@ -1353,7 +1349,7 @@ impl UnopenedPersistCatalogState { }; if read_only { - let (txn_batch, _) = txn.into_parts(); + let (txn_batch, _) = txn.into_parts()?; // The upper here doesn't matter because we are only applying the updates in memory. let updates = StateUpdate::from_txn_batch_ts(txn_batch, catalog.upper); catalog.apply_updates_and_consolidate(updates)?; @@ -1651,6 +1647,16 @@ impl ApplyUpdate for CatalogStateInner { /// so that it can expire its leases. If/when rust gets AsyncDrop, this will be done automatically. type PersistCatalogState = PersistHandle; +impl PersistHandle { + /// Creates a transaction without validating pending catalog updates. + async fn transaction_unchecked(&mut self) -> Result, CatalogError> { + self.metrics.transactions_started.inc(); + let snapshot = self.snapshot().await?; + let commit_ts = self.upper; + Transaction::new(self, snapshot, commit_ts) + } +} + #[async_trait] impl ReadOnlyDurableCatalogState for PersistCatalogState { fn epoch(&self) -> Epoch { @@ -1761,6 +1767,29 @@ impl ReadOnlyDurableCatalogState for PersistCatalogState { Ok(updates) } + #[mz_ore::instrument(level = "debug")] + async fn ensure_not_out_of_sync( + &mut self, + target_upper: Timestamp, + ) -> Result<(), CatalogError> { + self.sync(target_upper).await?; + let update_count = self + .update_applier + .updates + .iter() + .take_while(|update| update.ts < target_upper) + .count(); + if update_count == 0 { + Ok(()) + } else { + Err(DurableCatalogError::CatalogOutOfSync { + update_count, + upper: target_upper, + } + .into()) + } + } + async fn current_upper(&mut self) -> Timestamp { self.current_upper().await } @@ -1789,18 +1818,37 @@ impl DurableCatalogState for PersistCatalogState { #[mz_ore::instrument(level = "debug")] async fn transaction(&mut self) -> Result { - self.metrics.transactions_started.inc(); - let snapshot = self.snapshot().await?; - let commit_ts = self.upper.clone(); - Transaction::new(self, snapshot, commit_ts) + let mut txn = self.transaction_unchecked().await?; + txn.ensure_not_out_of_sync().await?; + Ok(txn) } fn transaction_from_snapshot( &mut self, snapshot: Snapshot, - ) -> Result { - let commit_ts = self.upper.clone(); - Transaction::new(self, snapshot, commit_ts) + ) -> Result { + let commit_ts = self.upper; + Transaction::new(self, snapshot, commit_ts).map(DryRunTransaction::new) + } + + #[mz_ore::instrument(level = "debug")] + async fn allocate_id( + &mut self, + id_type: &str, + amount: u64, + commit_ts: Timestamp, + ) -> Result, CatalogError> { + let start = Instant::now(); + if amount == 0 { + return Ok(Vec::new()); + } + let mut txn = self.transaction_unchecked().await?; + let ids = txn.get_and_increment_id_by(id_type.to_string(), amount)?; + txn.commit_internal(commit_ts).await?; + self.metrics + .allocate_id_seconds + .observe(start.elapsed().as_secs_f64()); + Ok(ids) } #[mz_ore::instrument(level = "debug")] @@ -1834,30 +1882,34 @@ impl DurableCatalogState for PersistCatalogState { return Ok(catalog.upper); } - // If the current upper does not match the transaction's commit timestamp, then the - // catalog must have changed since the transaction was started, making the transaction - // invalid. When/if we want a multi-writer catalog, this will likely have to change - // from an assert to a retry. + // The handle is mutex-protected from transaction creation through commit, so only a + // local programming error can change its cached upper here. assert_eq!( catalog.upper, txn_batch.upper, - "only one transaction at a time is supported" + "the handle was mutated mid-transaction" ); - assert!( - commit_ts >= catalog.upper, - "expected commit ts, {}, to be greater than or equal to upper, {}", - commit_ts, - catalog.upper - ); - - let updates = StateUpdate::from_txn_batch(txn_batch).collect(); + let updates: Vec<_> = StateUpdate::from_txn_batch(txn_batch).collect(); debug!("committing updates: {updates:?}"); + // Empty upper progress does not invalidate the transaction. + let mut commit_ts = max(commit_ts, catalog.upper); + let next_upper = match catalog.mode { - Mode::Writable => catalog - .compare_and_append(updates, commit_ts) - .await - .map_err(|e| e.unwrap_fence_error())?, + Mode::Writable => loop { + let updates_applied_before = catalog.updates_applied; + match catalog.compare_and_append(updates.clone(), commit_ts).await { + Ok(next_upper) => break next_upper, + Err(CompareAndAppendError::Fence(e)) => return Err(e.into()), + Err(CompareAndAppendError::UpperMismatch { actual_upper, .. }) => { + // The mismatch synchronized the handle. Retry only if it applied no + // content. + catalog + .classify_upper_mismatch(updates_applied_before, actual_upper)?; + commit_ts = max(commit_ts, catalog.upper); + } + } + }, Mode::Savepoint => { let updates = updates.into_iter().map(|(kind, diff)| StateUpdate { kind, @@ -1883,39 +1935,42 @@ impl DurableCatalogState for PersistCatalogState { #[mz_ore::instrument(level = "debug")] async fn advance_upper(&mut self, new_upper: Timestamp) -> Result<(), CatalogError> { - if self.upper >= new_upper { - // We don't expect a no-op advancement, but if we are wrong we'd crash the process. - // Seems safer to only soft-assert and return gracefully in production. If we get here - // that means we tried to make the catalog shard readable at a time it was already - // readable, which likely means we are violating linearizability. That's not great, but - // crashing (or even crash-looping) is worse. - // - // TODO: Consider removing this once we have built some confidence. - soft_panic_or_log!( - "new_upper ({new_upper}) not greater than current upper ({})", - self.upper - ); - return Ok(()); - } - - match self.mode { - Mode::Writable => self - .compare_and_append_inner([], new_upper) - .await - .map_err(|e| e.unwrap_fence_error())?, - Mode::Savepoint => (), - Mode::Readonly => { - return Err(DurableCatalogError::NotWritable( - "cannot advance upper of a read-only catalog".into(), - ) - .into()); + loop { + if self.upper >= new_upper { + // This does not consult Persist. It only revalidates a fence already cached by + // this handle, since a sync can advance `upper` while recording the fence. + self.fenceable_token.validate()?; + return Ok(()); } - } - self.upper = new_upper; - // No sync needed since no data was written. + match self.mode { + Mode::Writable => {} + Mode::Savepoint => { + self.upper = new_upper; + return Ok(()); + } + Mode::Readonly => { + return Err(DurableCatalogError::NotWritable( + "cannot advance upper of a read-only catalog".into(), + ) + .into()); + } + } - Ok(()) + let updates_applied_before = self.updates_applied; + match self.compare_and_append_inner([], new_upper).await { + Ok(()) => { + self.upper = new_upper; + // No sync needed since no data was written. + return Ok(()); + } + Err(CompareAndAppendError::Fence(e)) => return Err(e.into()), + Err(CompareAndAppendError::UpperMismatch { actual_upper, .. }) => { + // The mismatch synchronized the handle. Retry only if it applied no content. + self.classify_upper_mismatch(updates_applied_before, actual_upper)?; + } + } + } } fn shard_id(&self) -> ShardId { diff --git a/src/catalog/src/durable/transaction.rs b/src/catalog/src/durable/transaction.rs index 50b791a2e885c..5c01ccbe3f80b 100644 --- a/src/catalog/src/durable/transaction.rs +++ b/src/catalog/src/durable/transaction.rs @@ -74,6 +74,9 @@ use crate::memory::objects::{StateDiff, StateUpdate, StateUpdateKind}; type Timestamp = u64; +#[derive(Debug, PartialEq)] +struct CommitCapability; + /// A [`Transaction`] batches multiple catalog operations together and commits them atomically. /// An operation also logically groups multiple catalog updates together. #[derive(Derivative)] @@ -116,10 +119,38 @@ pub struct Transaction<'a> { upper: mz_repr::Timestamp, /// The ID of the current operation of this transaction. op_id: Timestamp, + // `DryRunTransaction` removes this token. Commit entry points check it. + // Decomposition transfers it to `TransactionBatch` before exposing the + // durable handle. + commit_capability: Option, +} + +/// A catalog transaction that can be evaluated but cannot be committed. +#[derive(Debug)] +pub struct DryRunTransaction<'a> { + transaction: Transaction<'a>, +} + +impl<'a> DryRunTransaction<'a> { + /// Permanently revokes commit permission and returns a dry-run transaction. + pub fn new(mut transaction: Transaction<'a>) -> Self { + transaction.commit_capability = None; + Self { transaction } + } + + /// Returns a mutable view for evaluating catalog operations. + pub fn transaction_mut(&mut self) -> &mut Transaction<'a> { + &mut self.transaction + } + + /// Exports the current dry-run state as a [`Snapshot`]. + pub fn current_snapshot(&self) -> Snapshot { + self.transaction.current_snapshot() + } } impl<'a> Transaction<'a> { - pub fn new( + pub(super) fn new( durable_catalog: &'a mut dyn DurableCatalogState, Snapshot { databases, @@ -230,6 +261,7 @@ impl<'a> Transaction<'a> { audit_log_updates: Vec::new(), upper, op_id: 0, + commit_capability: Some(CommitCapability), }) } @@ -2443,6 +2475,7 @@ impl<'a> Transaction<'a> { txn_wal_shard: _, upper, op_id: _, + commit_capability: _, } = &self; let updates = std::iter::empty() @@ -2572,7 +2605,26 @@ impl<'a> Transaction<'a> { self.upper } - pub(crate) fn into_parts(self) -> (TransactionBatch, &'a mut dyn DurableCatalogState) { + fn ensure_committable(&self) -> Result<(), CatalogError> { + match self.commit_capability { + Some(_) => Ok(()), + None => Err(DurableCatalogError::DryRunTransaction.into()), + } + } + + /// Verifies that this process has not missed catalog content updates. + pub(super) async fn ensure_not_out_of_sync(&mut self) -> Result<(), CatalogError> { + self.durable_catalog + .ensure_not_out_of_sync(self.upper) + .await + } + + pub(crate) fn into_parts( + self, + ) -> Result<(TransactionBatch, &'a mut dyn DurableCatalogState), CatalogError> { + let commit_capability = self + .commit_capability + .ok_or(DurableCatalogError::DryRunTransaction)?; let audit_log_updates = self .audit_log_updates .into_iter() @@ -2605,14 +2657,19 @@ impl<'a> Transaction<'a> { txn_wal_shard: self.txn_wal_shard.pending(), audit_log_updates, upper: self.upper, + _commit_capability: commit_capability, }; - (txn_batch, self.durable_catalog) + Ok((txn_batch, self.durable_catalog)) } - /// Commits the storage transaction to durable storage. Any error returned outside read-only - /// mode indicates the catalog may be in an indeterminate state and needs to be fully re-read - /// before proceeding. In general, this must be fatal to the calling process. We do not - /// panic/halt inside this function itself so that errors can bubble up during initialization. + /// Commits the storage transaction to durable storage. + /// + /// [`DurableCatalogError::DryRunTransaction`] is a pre-effect + /// programming error that leaves durable state unchanged. Any other error + /// outside read-only mode indicates the catalog may be in an indeterminate + /// state and needs to be fully re-read before proceeding. In general, such + /// errors must be fatal to the calling process. We do not panic/halt here so + /// initialization can report them. /// /// The transaction is committed at `commit_ts`. /// @@ -2625,7 +2682,8 @@ impl<'a> Transaction<'a> { self, commit_ts: mz_repr::Timestamp, ) -> Result<(&'a mut dyn DurableCatalogState, mz_repr::Timestamp), CatalogError> { - let (mut txn_batch, durable_catalog) = self.into_parts(); + self.ensure_committable()?; + let (mut txn_batch, durable_catalog) = self.into_parts()?; let TransactionBatch { databases, schemas, @@ -2652,6 +2710,7 @@ impl<'a> Transaction<'a> { txn_wal_shard, audit_log_updates, upper: _, + _commit_capability: _, } = &mut txn_batch; // Consolidate in memory because it will likely be faster than consolidating after the // transaction has been made durable. @@ -2686,10 +2745,14 @@ impl<'a> Transaction<'a> { Ok((durable_catalog, upper)) } - /// Commits the storage transaction to durable storage. Any error returned outside read-only - /// mode indicates the catalog may be in an indeterminate state and needs to be fully re-read - /// before proceeding. In general, this must be fatal to the calling process. We do not - /// panic/halt inside this function itself so that errors can bubble up during initialization. + /// Commits the storage transaction to durable storage. + /// + /// [`DurableCatalogError::DryRunTransaction`] is a pre-effect + /// programming error that leaves durable state unchanged. Any other error + /// outside read-only mode indicates the catalog may be in an indeterminate + /// state and needs to be fully re-read before proceeding. In general, such + /// errors must be fatal to the calling process. We do not panic/halt here so + /// initialization can report them. /// /// In read-only mode, this will return an error for non-empty transactions indicating that the /// catalog is not writeable. @@ -2704,6 +2767,7 @@ impl<'a> Transaction<'a> { /// about the caller in this method, in practice it results in duplicate work on every commit. #[mz_ore::instrument(level = "debug")] pub async fn commit(self, commit_ts: mz_repr::Timestamp) -> Result<(), CatalogError> { + self.ensure_committable()?; let op_updates = self.get_op_updates(); assert!( op_updates.is_empty(), @@ -2717,9 +2781,16 @@ impl<'a> Transaction<'a> { // transaction, otherwise the commit was performed with an out of date state. // Read-only catalogs can only commit empty transactions, so they don't need to consume all // updates before committing. + // + // The off-loop group committer can advance the catalog upper without content while this + // transaction is open. The commit then rebases above `commit_ts`. Its returned `upper` is + // the exclusive upper of the successful write. soft_assert_no_log!( - durable_storage.is_read_only() || updates.iter().all(|update| update.ts == commit_ts), - "unconsumed updates existed before transaction commit: commit_ts={commit_ts:?}, updates:{updates:?}" + durable_storage.is_read_only() + || updates + .iter() + .all(|update| update.ts >= commit_ts && update.ts < upper), + "unconsumed updates existed before transaction commit: commit_ts={commit_ts:?}, upper={upper:?}, updates:{updates:?}" ); Ok(()) } @@ -2836,7 +2907,7 @@ impl StorageTxn for Transaction<'_> { } /// Describes a set of changes to apply as the result of a catalog transaction. -#[derive(Debug, Clone, Default, PartialEq)] +#[derive(Debug, PartialEq)] pub struct TransactionBatch { pub(crate) databases: Vec<(proto::DatabaseKey, proto::DatabaseValue, Diff)>, pub(crate) schemas: Vec<(proto::SchemaKey, proto::SchemaValue, Diff)>, @@ -2896,6 +2967,9 @@ pub struct TransactionBatch { pub(crate) audit_log_updates: Vec<(proto::AuditLogKey, (), Diff)>, /// The upper of the catalog when the transaction started. pub(crate) upper: mz_repr::Timestamp, + // A private, non-cloneable capability keeps batches constructible only by + // transaction decomposition. + _commit_capability: CommitCapability, } impl TransactionBatch { @@ -2926,6 +3000,7 @@ impl TransactionBatch { txn_wal_shard, audit_log_updates, upper: _, + _commit_capability: _, } = self; databases.is_empty() && schemas.is_empty() @@ -4337,6 +4412,116 @@ mod tests { assert_eq!(db_privileges, db.privileges); } + #[mz_ore::test(tokio::test)] + #[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` + async fn test_dry_run_transaction_rejects_internal_commit() { + const VERSION: Version = Version::new(26, 0, 0); + let mut persist_cache = PersistClientCache::new_no_metrics(); + persist_cache.cfg.build_version = VERSION; + let persist_client = persist_cache + .open(PersistLocation::new_in_mem()) + .await + .unwrap(); + let mut state = TestCatalogStateBuilder::new(persist_client) + .with_default_deploy_generation() + .with_version(VERSION) + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + let _ = state.sync_to_current_updates().await.unwrap(); + + let initial_id = state.get_next_id(USER_ITEM_ALLOC_KEY).await.unwrap(); + let initial_upper = state.current_upper().await; + let snapshot = state.snapshot().await.unwrap(); + let mut dry_run = state.transaction_from_snapshot(snapshot).unwrap(); + let ids = dry_run + .transaction_mut() + .get_and_increment_id_by(USER_ITEM_ALLOC_KEY.to_string(), 1) + .unwrap(); + assert_eq!(ids, vec![initial_id]); + + let transaction = dry_run.transaction; + let err = transaction + .commit_internal(initial_upper) + .await + .unwrap_err(); + assert!(matches!( + err, + CatalogError::Durable(DurableCatalogError::DryRunTransaction) + )); + assert_eq!(state.current_upper().await, initial_upper); + assert_eq!( + state.get_next_id(USER_ITEM_ALLOC_KEY).await.unwrap(), + initial_id + ); + } + + #[mz_ore::test(tokio::test)] + #[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` + async fn test_dry_run_transaction_rejects_into_parts_escape() { + const VERSION: Version = Version::new(26, 0, 0); + let mut persist_cache = PersistClientCache::new_no_metrics(); + persist_cache.cfg.build_version = VERSION; + let persist_client = persist_cache + .open(PersistLocation::new_in_mem()) + .await + .unwrap(); + let mut dry_run_state = TestCatalogStateBuilder::new(persist_client.clone()) + .with_default_deploy_generation() + .with_version(VERSION) + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + let mut replacement_state = TestCatalogStateBuilder::new(persist_client) + .with_default_deploy_generation() + .with_version(VERSION) + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + let _ = dry_run_state.sync_to_current_updates().await.unwrap(); + let _ = replacement_state.sync_to_current_updates().await.unwrap(); + + let initial_id = dry_run_state + .get_next_id(USER_ITEM_ALLOC_KEY) + .await + .unwrap(); + let initial_upper = dry_run_state.current_upper().await; + let snapshot = dry_run_state.snapshot().await.unwrap(); + let mut dry_run = dry_run_state.transaction_from_snapshot(snapshot).unwrap(); + let ids = dry_run + .transaction_mut() + .get_and_increment_id_by(USER_ITEM_ALLOC_KEY.to_string(), 1) + .unwrap(); + assert_eq!(ids, vec![initial_id]); + + let replacement = replacement_state.transaction().await.unwrap(); + let escaped = std::mem::replace(dry_run.transaction_mut(), replacement); + drop(dry_run); + + let err = match escaped.into_parts() { + Ok(_) => panic!("dry-run transaction decomposed into committable parts"), + Err(err) => err, + }; + assert!(matches!( + err, + CatalogError::Durable(DurableCatalogError::DryRunTransaction) + )); + assert_eq!(dry_run_state.current_upper().await, initial_upper); + assert_eq!( + dry_run_state + .get_next_id(USER_ITEM_ALLOC_KEY) + .await + .unwrap(), + initial_id + ); + } + /// Regression test for DB-147: inserting a replica with an explicit id must not consume the /// `IdAlloc` counter, and the durable allocator must advance independently so a later /// allocation never collides with an explicitly inserted id. @@ -4376,6 +4561,7 @@ mod tests { log_logging: false, interval: Some(Duration::from_secs(1)), }, + arrangement_compression: false, }; // Step 1: allocate one user replica id out-of-band via the durable allocator. @@ -4387,12 +4573,16 @@ mod tests { .into_element(); assert!(a.is_user()); + let initial_updates = state.sync_to_current_updates().await.unwrap(); + assert!(!initial_updates.is_empty()); + // Step 2: insert a replica with that explicit id and commit. let mut txn = state.transaction().await.unwrap(); txn.insert_cluster_replica_with_id(cluster_id, a, "explicit", config, owner_id) .unwrap(); let commit_ts = txn.upper(); txn.commit_internal(commit_ts).await.unwrap(); + let _ = state.sync_to_current_updates().await.unwrap(); // Step 3: allocate one more user replica id. let commit_ts = state.current_upper().await; diff --git a/src/catalog/src/durable/upgrade.rs b/src/catalog/src/durable/upgrade.rs index 280bf5d3a2b61..11c1266b2e817 100644 --- a/src/catalog/src/durable/upgrade.rs +++ b/src/catalog/src/durable/upgrade.rs @@ -242,7 +242,7 @@ macro_rules! objects { objects!( [v74, v75, v76, v77, v78], - [v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89] + [v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90] ); /// The current version of the `Catalog`. @@ -270,6 +270,7 @@ mod v85_to_v86; mod v86_to_v87; mod v87_to_v88; mod v88_to_v89; +mod v89_to_v90; /// Describes a single action to take during a migration from `V1` to `V2`. #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] @@ -474,6 +475,15 @@ async fn run_upgrade( ) .await } + 89 => { + run_versioned_upgrade( + unopened_catalog_state, + version, + commit_ts, + v89_to_v90::upgrade, + ) + .await + } // Up-to-date, no migration needed! CATALOG_VERSION => Ok((CATALOG_VERSION, commit_ts)), FUTURE_VERSION.. => Err(incompatible), diff --git a/src/catalog/src/durable/upgrade/snapshots/objects_v90.txt b/src/catalog/src/durable/upgrade/snapshots/objects_v90.txt new file mode 100644 index 0000000000000..d3b6cf97e12c4 --- /dev/null +++ b/src/catalog/src/durable/upgrade/snapshots/objects_v90.txt @@ -0,0 +1,100 @@ +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Qto8q77+9TvCbspngv5clCjNCMeCpkeCgt1zDgi7wnrin8J2TrV4nauCpjTskJvCegIzitqAlPSTwkYqb6qOWYCXRqGMKNkI0UiJPYyLwnLKrJfCWuZQn4KqrI3vRqPCflbQmYCQmND/hqIslU/CflbRWw4rIuuCnoXjIugoQQg5K77eP4bO1PDsvYOCojwoxQi8vMSU6KCM74aa/8J2Vhn7vv7174b2TPPCRjIXvrr7wnrmq8JiOrPCWq4JxUGMiPQoeQhwm8JOEufCdlL580ajRqPCRnLd776yDPSHgpYk8CjFCL/CegIbqnr3wkJKy77+94b+DfvCctZ8iTjo88J28kPCehY/wkYKQPTrwkISAPcO0CiJCIGEkNTov4K2fe/CeuZngt4Xvv70lJfCWvo8hOmdgJi9cCipCKOGpv+CwidiK8JGNlzvDvi/hiZ0kKi/CpfCeoolQ8JCokvCWrZXgqLwKQ0JB8JGxoS/DvF9cJEXwn4Oww4zwnoCE8JastEM38J+BoSbgtIvOjNGo4LeqVSoqIiLCpci6LeCmriXwnY2hKvCRq4cKSkJIyLo64LWEcvCQlLgi8JGbouG9kPCQlYVz8Jy5iPCeoovwn5W0PPCQiq7vv708L+Gcg/CfgqZA4K+BKjLwkbSQJtGoYMKmJ0NcCgdCBfCforEmCi9CLT0iXDPgsYTwnouf4q6HJiRTKvCRvLfwn5W0VHjRqOGlgOCrh3tGLiow4Ku9bAoCQgAKM0Ix8J+VtPCRj5EqL1QvPPCepJFVXfCQp4klU+GqkDrguoLwlqylKPCflbRgUPCflbRTNQoMQgp9ZF0qKmDwn6K0ChZCFMKl4K+2PdGo4Ku5WS7CpT9BRkpLCiRCIl3hn7LIj1ngrpTivaJg4aSiyLrgrYc6Zj3wlr25SOG/kFwKHUIb8J+CpD3gsoPIuuGto+GkmS8/8JGaljPhg4cuCj5CPCHwkb6w4LScw6Um4LuC4KqCJfCQiovguoQ98J2psSXwrZ2KJSTPlvCQlbQ/Je+/vTc8SGLjgJXwkY+IYApDQkHhiYrwkYy1aOK2sj/gtoImdcK6L+KuhPCfpKwkVeCriO+/vfCfoLLvv70vKi8uZe+/vfCxirlB77+9JiI977mDJwouQixtQPCflbQkPfCflbQ9Lkk84K6ZL3V+8JGApPCdlLwiWyVtJeGDgi7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RjJhcXMKl77+98J+VtC7wkL+zwqXwn5W0wrEkSjrCpeCrguCuiifwnrqoChlCF/CQgIngtYrCpVzwkY6LL9iMYSXgsahgCjRCMvCegKQmyLrvpJMieyrwnrikw4xP8JGxl3IkVyrRqDzwnLyZWC5cVW5+YfCbsoDgrY1iChxCGuqurSBrJipSOMi6T+KziHvwnZu18JCjtMKlCkBCPvCWqaRTXPCQtLEl4rCHzZfwn5W0JfCcub/jg4An8JCWhfCflbQuJfCQj41jKvCdm67wlq2UfC7hiYrwkZuICjFCL2FHeyfwkbus8JGoosKp4oGafe+6l+GBkfCQlZvhn7FHyLrwkKSuJcKlLnvRqCMrCilCJ/Cju6PvvK4/W3oi8J65l+CmrjwiUGA6L8i6YyY68JCNmuCuteK0rQpBQj9c4KqoJkHwnZmULyrDvu+3g+Cuv1bvv73wkYWqdGw6QCXihY3wkYOU4Kut8Jarg2DitrAiQvCegJU/ItGoXG4KLUIrNjoifT3hi4knXCI825zwkYyPXCMm4o+J1oLgqI8p8JGgnfCfqog80ajDkAooQiYu8J2VhifXr++/veGDh/CQqZR18J2Sons6JSct8J+gg8i64aGyMAoOQgw8e1Jiw67wnrqAfSoKPUI70agiZMKlOGAkyLrCpS/hvZ0qwqUqUuOCmi8k8J6fqCgi8JGPoeGip/CeuaHwkJWwXPCbgJvRqPCQkJgKO0I5LvCbhabRqFXwkK6R4LCgw6Ul8JCokVxUMXZ70ajgvbQuw6HwlquJPcKlJ+C2veGMlXRu8J+VtF9gCkNCQfCRvLQl77+98JGHrvCRj6E/0agqWS1uOk/IuvCSkKfgp4I+wq9gJmLwkbWCKsi6VS/wloSd8J65mSom8JGcgN6QCihCJvCbsbbCpS48PMKlUvCQnYp78JCVseqshVLwkpSCWGRcd/Ceub5HCh5CHPCRtpbRqPCdhIJe4aqSLz9cIvCSkbHjgbDgrYcKDUIL4KeLYChH8JG7rS4KKkIoY9Go4Kqt4Yq0JfCRprcn77+LXFc377+98JC5seC1iHsm8J6fseCzngokQiLwnrm66qC1OvCRg6XwkaWRYCgl8Jq/vuCmsvCQi7o6XMOGCkhCRi7hqpkn8J6frTon8JKTvDbwkYOB4LSBOuGmnFwvyLrwnrmhMV3wnZSOw5Tvv71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SP8OyCjVCM1Bj8J+qgeqSsy8iwqVjLvCepJkvYF5mcuGPulzwnrSt44eycCXwn4mQ6qKRPOCti+K2iwoQQg7wnYuN4b6FMXx74KmcJAoHQgXwkZyQQgo8Qjo9YGPRqPCfoLLwm4OtOOCnnG5cwrXgrbUkP++/hSY96p+R6qq7P+GghfCRpLdO8J+bpzo9JOGqlHtiCj5CPOCmlT3CpXXhrrI9Vlw/8JGklvCfg4Pwn5W00ahxZ/CQk7M8WEMvW+G/luqvuPCflbTwn5W0a088e++/ogovQi3wnoGfa8i68JGEqFngoZUk8JCWtOCxr3TwkJa38J2qn1wiPCbgrqPRqDHhopAKOUI3TCLOjOGftyTwn5W0XExLP0TCpSBV8J+Jh8OwJi/gpKwv0ag94LeELmHwn6qi8JGNl/CQiqEsIgo/Qj1QJvCRjKLhppgkLyoqbPCRvrA0wrrDkPCfhqZIcfCRj4JqPWDgtYbwkYiD8JG/j3vhoJEicPCQqLTDhWA9Cg9CDeGmsuGdkT0iL/CRg7YKNUIzdj/hsYY/Kj8wwqVK8J+IsDHgp4cs8J2Uozzwn5W0QyJb8JCFvV97L+OFrz89diRK6p+RCiVCI+G/gzzgqIJS4LeWXGAl8JCdk+CyvdWrcVzvv73MkCnwn5W0CjJCMPCRvIdgcfCflbRy4Kme8J2Ttjon4KayyLritpIwP3hgZmBO4Kiqd+CzqFNV8J+VtApDQkF24by38J2Snu+tgfCWraN44YmU4LGZNOCric6GavCWrZ/grZUv8JCAsSDwkKuJ8J+VtE7wn52/4bKRbE7vv716PQokQiLwkIGCJPCfnrHhkqQ68JGxvS5gPCZ1Wy9ZZjpsYCJWwq4vCgtCCeCvhzw0Lj5WUgoyQjBg4KuM8J65gm3hoJfqo5DCpfCWq5vDvSY8az1KPC1o8J6igTxD4K6+wqIlJ++/vScKKkIoVWfRqMKlw5AqfvCQqa1gyLpTeCIqJPCRjbEqK+C4nsK5KvCWrockMQo6QjhE4bGEJtGo4LGWJcKmb1vRqOCssyY7PMKkwrMqIuC1nfCfj77RqHFyRuCovOCrvDzwkKKpL8O6YAoJQgfIujrwkY2zCh5CHCQmLyU/8JGKpCEm4Kat8JGws+GJmPCRpZYqw4cKJkIk8J+VtOCzo/CfnZLwkYSx8J6AlfCRr5F04LKIIGI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tnwogQh7wnoSy8J+VtOCytmBCIj/it5rhv5suL/CehY5rwqUKFUITPfCflbQr8JGNh/CWraVpPzbXsQouQizgrYPIuvCQoLx1JuK0mj0iJPCfqpF74Y+ISTos8JCAvSfwnaqfa++3j+CrkAo2QjTwn66S44Ci4Kujwr/tn4Lwn5W04amr4LKl8LGMh23gqZzqoIleJuCxofCQpL86JfCeuagiCkBCPnkzefCRoq9l6q+0KnHwkb6w8J2Su2ExM+Cximk3VfCeuY7IuvCfp5Mj8K2piPCdkqkpfWY/77+rOmQy4LufCjFCLzTwkKmQYvCflbRGccO2Wioue0TwkLCDwqXhv7zwn5W04K6x8JCgvPCav74nyLpgCghCBljwkIGaKgomQiTCpUZd8J+VtDw9wqVpNeGKizxg8JCGoC4k8J6Lv/CeuLvhrpgKPUI7ceCyrfCQnYDgp4zqn5NXJSnwkICw2LZEeuChnl8lIvCQv4jwnZKiZ/CRgqknwqXwkbaT8Ja8vOCuiS4KSEJG4Kme8J6TmDzwnrmLw7PDrOC+kj084Kuo8JuFlUBc4LqE8JCgg11k8JG8p+CrofCRjr1AUuGPkjzYiUfwn6m4JcKl8JiokQopQifwn5W0L+CmvnbqnIvwkKi68JG9gy7wkZy7JsKlYOCyju+shD3qrYkKSUJH4LaBccKl4LOE8JC7g3sq8J+VtPCfrJDvv70jw5bwkJaV4LaT8J2TgNGo8JG2qT0vdiI277+9L3Il8JG0qeGzh1fwkYu1RGAKJUIjbWjRqPCRlr57wqXgqLJHJS/Wj+KChHHit5ovOvCQsK9cS0kKGUIXYPCRjrfgsq7grbFuI+qlnzlE8J+jgGAKLUIr4YmYSvCesb1PO9GoVSZ5QH4m8Jauglzgsqpf4KyCKuCqrHPgsodbPOCwiwokQiI64LGHYCZ7SC5iJ+G2gvCetJZZ8JCYmNGoPS8v77+94L63CihCJnsnd/CfiaMqL/CQoLfgp4fIuvCcvLAqJvCWrILwkbWRwqXwnoCwCjRCMnBJ8JGsieCouXclP2ngr4rwkZylPzVU77eP6p+cVMOF4KeXLHvwkYqIXfCRpLjvv70vChJCEFHwn5W04LOiOOGmoMi6aT8KKEImOionUD1gOCcqIvCdkp7wkayD8JCrtPCQnqtILi5gJuGtt/CYtIYKLEIqJOC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oQiZh77+9PCDDqMON77mQPfCdgpNHRvCRhL4k4L2kKsOC4raP8Ja+lQotQivwn5W0IvCfiYTgopl9wqhjP/CflbQvLyXCpX53OuCssvCeuYt7PTTIui9XCgtCCeGJlXtg8J+figoqQigu8J+VtOGDjeODuyHwn4OfOnDgqYHwlJelXCRg8J66qPCWupDwkaSJChNCETzwkbKsw6fqn5rwnrmC77mjCj5CPMOzwqVRTfCflbTIunHwq5+t8J2SojNz4aCP4aG0PF1lXOKRiu+/qU3wkLaFS/CflbRHPOC6guC9tyo6Nwo2QjTgqLbhg4dg8J6lnu+/vT7gtY0kau+/vWAn8JCbt07hvZ3wkIqB8J+VtGMh8J65giJDOsKiCjJCMO+sufCRtpjCoOGhpjLRqF5mXPCepZAo8JGRoFZoevCbsbR64a20ZeGLi+Cmre+/vQo3QjXqqr7wlq6M4LWhXnvIuvCQvbQ0aPCeuIJl8JGOjj1WeGB48JGriuCpgMKl6p+T8JC/pOCrowoxQi/wnZK74Ka34KuQcfCRpLhUbPCQlIHwkb2EeyVb0ahBT/Cdh5jguLHhpLTwn4evPQoMQgpZeydgez9g4K6cCjRCMvCQj5E8JDTvv5fwn5W0e1nwnrmH8JGbl/CRo5YsPM2677mqQi5r8LGMneC2vci6XComCiNCISVK8Jy8te+/nGclJyLjg4FUTjRH8JCilPCRjLIi4aqkJgozQjFpJSXwkZuFLydg8JGOiCrwkY+PKnLwkKi1yLpx77SC4aSVUFwq6qyWfsKma2AvMmA9ChNCEUThqrwm4K6/bSfhirUm77mWCihCJuC2iVB7IPCQtLPvv73IuvCQp4t7IiXitKc3Li7wkZOQ8KWnsnhgCgxCCtGo8JCoumvhipQKQEI+4K6Z8JGTmS9AK+GMmOG9myvwr6WtRMi6bsOKSidXPfCRtLzwnbyJ8J6Lt1DwkJWLc2jwm7Gf8J+VtPCeuYIKCkIIw4jqoKlZzpIKJ0IlIvCen6Yv4LSm8J2Sn/Cdnqst4LOr8JG1pOCsgmAq4LqbJC4zTgoqQijgqr3wkYOTUPCTg77guKjgraLwn5W04K+XSSdgJifvuaPhi4tWJm5HCksKBG5hbWUSQ0JB8JOzjtGo8J+fpvCRtKPCp+K6klzgrp/DkHnCrCoiKjQ2OuGIti7gvKcjJfC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i4K+A4Yq6XPCQoJTwlqqLyLo5wqUq8J+VtD7wnou/JWkm4KyHKfCQpL/wkbaRCitCKTzwkJaRPEPwn4mGZOCpnDUlauC8sT3hiZTwnZSc8J2qqPCflbTgpL4nCiFCH/CeuY1deyXhjaXCpeKGqjo9JHoi4L+I8J+VtMKlwrgKNkI08J6kleC4smM2e+C9p9KM8J+JpdGo8JGQtz0/Je+/vfCeuq94JFjIuvCegJvvv71b4rW/Jgo1QjPwkI2mYCTwlrWt8J2TvyR78J+ps3Xvv6JO4K2d3LvwkJO08J+VtHUwczDwkIC9T/CQtLEKLUIrYeC4sirzoIaR8JG1gPCQgIIn4Y+vTyoiLnlk8JGCvi48J3vgroMuOifCpQonQiUu8Jq/teC3qGdHwqVgbfCRtYY877+9JUjhp5BcVNWkXOqfl0lFChJCEOGHmDZg8JGXnOChpjPgtZ4KK0Ip8J+VtHs38JCggXo6P/CepZRvOvCQo7Qn4YGD4Ki48JCXsC578JiohzoKN0I1NvCeoL4ldPCdgK8s8JGTmWk9Klt14LuGXS7hj7rwkIag8JCtsmV14K2NKCrwn5W0QeC1jTcKFEISLC4qTsOvwqXwkJau8JCplsi6CgJCAAobQhnwnrmLKifvuZLCsWBkYCdFLi7iuoNK4oKhCjNCMWLitLXhvI3wnoWH8JG1reG9mfCegJbgrLJc8JGNsUXhjJPwkYu0SvCRtLzgtZVHNVMKKEImw7h74ratTvCforhZ8JGHsfCek6ZycCfwkL2B8JGCitGo8J+VtGwKBUIDwqIuCjZCNPCfo4HCuO+8lFF77Z668J64gfCdkp7gtqvCpTjIunXwkbyMJfCQqJYq8JartfCeo4tLOW8KPkI8PUfgsZngoLlq4r+4PSfCtzrvv73Dke+/vcO4JSLwn4K/4raq8J6Cj1zvv5t94La9QjxA0ajwkaSgJ2EmCi9CLXHwn6OA77+NIWDIuuCqh2I/Li/wn5W0JcKlWiFZ8JKRs/CeuIp70ajCpSVgQApBQj9v4ZGZL+CmrlzwkI6R86CGl2Y84LifSy/wkYOAK/CeipQ68JCurFhc8J+VtD/RqDVRXD3wkKS/Jci68JCwk0YKFUIT4LGiPOCtgcO0OlYlVeC3gu+/vQouQiw94Z2oLz9TJMOPKPCflbTwn5W0WvCbspZCdl/gsZhudMO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/vSHwnZSfyLrIuvCQnZJ6w65NIl0ibfCfn5d+P/Cei78KQkJAMNGow6ncni7CsvCQlpDwnoCnP/CQgJ4nfvCdi6HwkbCI4LuGeU8nJMKl8J65ncOEKic/8JC6mkrwm4WV4KuLPQoUQhJ2Pz9MJ+CxmDzgoIvwk4WMwqAKPkI8eVA977eCe92Y8J66p/CRjJ56JeK2q157d8Ol8Juyhjls4b2M8J+IliUgPSJI8J+psD3IuvCdkp/wn5W0CghCBkluSOGckwo5Qjcv8JaqoeGnlS/gs5VpImLwkYSQ762E4KqBQmhZ8J+iu/CRpZTvpKLhvLZKwrPwkKeDyLom4aeUCiBCHuCuqmDwnYOb8JGMlfCTlJkq8JGNl8K5Ij3huIM9YAocQhrgtY3grY0zfDou4YqMaCbgraBtIlzwn5W0XwojQiHgqYInZy3wnoqh8J+fhy8u4LWPe11m8J+VtPCRk5JgLicKO0I5J1xiMfCav7HwkZyd8JyziyYn8JK+vfCRjos4J27it5Lwnp+tYeK8u++/vSXwn5Wz76yXOmPwrLqhCipCKFtFakrIuuGipOK2q/CQgIYq8JCukSJ4TvCRsrF7RDvgrpNc8J+fsCIKJUIjKvCRvI7wlr+x4rScduGdqTrDrtGod2A/XCVC8JGKiDngoZAKKUInOvCfrbrgsrzhiqHgrpzitK3wqrSl8JColfCbiZbwkJa7IifwkbCHCi5CLC58aCLwkYy5Okcl4q298J+VtCFZ8JC0nC7qo77wkbGC8JCgkyTwkayB77+9ChBCDiQveuC2lmHgqYA86qmQCjhCNjrwnri78J+VtDzgtK/vv73RqGjwnrmfUfCbhLIiYEI/LirguYBcd/CQlZ5c4K2H77+9Jm0/YAoTQhHwnoS9cPCen6tEWC9X8J6hhAoKQgjhvZ3hoLI6TgowQi7grZ17aFw9e1xY8JCWj/CeuKRQOHHwkKi5fSQ74KeO4reFPUclKjYn4Z+iOiVcCjZCNE57LSrwkYuh0agmYW3CpV/hs6fqn5ByPu+/vS8ww5TwkJ6g8JCPkSVJ4Yml8J6Esy7gto4KO0I58JGNgj48XOqgtfCdi6nwnbyF6qyNdeCvik90IvCQs5Quwqrwn62EPSwnTS3graHgqZHgrbAi4rWQCjlCN3XwkLqxJfCdkp5gw5DwnrmC8J2Un/CTkY/wkJW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Ve2wvPW7hmqHhm7Xwnou/KvCQj4/gqI/it4skLnxs8J+ggm7wnZObwqUKC0IJSO+sgfCeubkuCjVCM8i6Rl5C4KeHKiY4ScKl8J6KofCeuZQ/8J+VtPCflbQ8ejrwrrOGL3t1ScKlRTvDhO+/vQo6Qjjwn5u88J6Ep++5s8K0NeCykCJlOirRqOClleGdrvCRjbAk4LeRyLonL/CQgI3gp61qb++/mz9KPwopQiciPM2+8J+VtOqshfCeuqPJlmBdLjw18JCuq8KlMSYqJOGQivCRnLIKQ0JBdfCRtajwkY+X8J+BuuC6jy/wkZuBb/CRpqJEWiF7YDo0e/CfjYvRqPCUj4M+8JC0iuCru8KlPzxQ4a6yJOCmoi4KPkI84LeYYPCflbQnw4kq0agmJT3wmKycYtafQOqVhlwmw4jwkIyb4K2jUTbgtoIiw6JjK/CQgIgm8J+VtCIxCiBCHu+/veGNmcOI8J+cnPCQoLxVLTrwkKeNzoXwnZKwOgooQibwn5W04LqBJ08kNe+sk1Dwn4Oew6TgpoVqTPCRtZnhiZjIuu+/vQoyQjDwn5W0YHtN8JCzrTEiTWw/VHAk4auHKsKlJ+G0izw3wqU677+98JC8g1ssJeCovG8KGkIY8JGmpVoqJ++5jjvwk4GmSuOAmvCQgI8/CghCBj3wn4mQJwowQi7RqDzwnrqlOsi6Pz1TKm8u8J65nTzNuyvwkKGUK07gqZxn4KqzfiA06qOXeEEvCjVCMz/guI/wkYqF77+9didSw6nwq4OS4LSQJFrgsKHhnp1r8JC6rWlgPcKjIS/CpSvwkISMSgoeQhzwn6GR8JO7glzIujrwnp+u4KikLeG8qn06wrAkCj5CPPCeuJ/wkY+hOyd7VvCRvrBKTHbwkZyVUD0m4LuCJGvDvXxO4KuAMvCQsqJLJt+E4b+0MEhB8J65kuGiggokQiLwn5W0NeGkoVEtyLrDssi6KlIv8J+VtPCRkZ9EyLrwnZKlCkhCRuG/sjrwn5u7Y/CYnIzwkJW3b3db1o0k8JKRsn3wnrqB8JGJgfCRu6Ft4ZykV/CRkLMg4b+gOkritI468J+VtOKCmfCQhKAKAkIACg9CDSUlL+C2vfCQpK49eycKHUIbYGBP8JG0iOqslPCRr5vwkY2j8JG1gPCQgZlMCihCJkt7KmVB8JGFktGoaSTgrL57Wu+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dkrvwk4WeJVtHd+Cnu+C+gfCQp7Pvv70r77+9dG9L4ZyLL3zwn66gKmFAJDo84LGdCidCJfCen64v8JG2ofCWrZ7hiZjCpSc9wqUzw5tD8JGboypcJsOC3YMKOEI2XPCRj5jwr6KD8J6Eszo94LuG8JihoU3hiYvwn4mCLPCfoZQ7w48k4KmR8JC0jmYgLmNj4oKOCi1CK/CRj5fCpSdt0ajwkaSQcWDVj+C2ukbDqHbwkr6kNPCQgJ4qQCQqw7HgprcKBUID6qCmCiZCJCXwnrm0XOGKtcKlPe+/vT9+26nCpSokLifIutGo6qyg4KizJgo8Qjrwn5W08J2VhvCQu4Lgt6rwlqumJj3vv73wnoWOJz1cwrnvv70lXOGooGbDtTpN8JCumu+/vSdY77+9CkFCP8KleG084LuGO/CQqIbCsPCflbQuJvCflbTwkISnw6fgqLk7dGHwkZmY4LaJ8JCjr/CQv7A98J+JiOGlseGzpAomQiQu8JGkq1ImP1HwkbWX4LqE44CBb+CgulXwn5W0L+GLgnvhqroKNkI0wqXCvlw777+9LOCqlWBRez86PvCflbRvwqXgoZNuJiV1JybDi/Ceuo1677+94aqQ8JGMgQoOQgzRqD/wkaSJ0ajCpT0KGkIY4KayfeCrkFxAXDzDiD5c4KiCREPwk4a5ChxCGvCSv5nwn4mhKlInNPCSkIzirrcidVTgq5BOCi1CKy/wnZSvPOCktj9XJvCforDwn6uyWPCeuYngrpU/IfCThqTwkbWgJvCRj6EKMUIvJTY8Oj/wnri74oCdUXs9PCbwn4KrXNGo8JCdoEUvXC7vv71N8J6BkMi64K6qWSUKKUIne8i677+9fiRA4KaoLiZHIsKl3YDwkYyvZXYuTtGo8JGPgjfwnrinCi9CLWd88J+VtHXiuZkn8J+VtCbwnruxY1kiJMKlWfCQpIsu8J64ilvwn5W0UyV5QQo+Qjxc8JC1qvCRj6LjgZE/wqQnYO+qtHlLYvCfiJddIvCRiKQvYNGoYPCepZU977+addGo44K34YuC8J2QgSIKM0IxJc6KU3Y6PHLqrKHiuKLgrJU9J1HwkLWILjJ7XPCflbTwkpCQ77+9LfCRjZcuO++/vQorQikq4LOs6qyVW1wm8J6FhyoqWfCWq7Eh8JGOi2Q94aq1ZVXwkbWSP1w8MgpGQkTvt4/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c4byZLvCQrpwKHUIb4YONKS43XDQvIvCeuY9lYvCQp59LJSbCpTxzCkZCRHVhOj9cL2AxKMKy8JCtrvCeuqJUXyrgoJTwnp+o8JCgiEfwkaucWPCav7514LOVVOGqlfCQlofwnrqFP/CdjZPwnYa0CiRCIkfwn6GmMu+/veqgsj3jhLVeJ/CQk4fgqa0yw4zwkKKq0agKNEIy4K2EIvCRkrpjXOCyjvCdnLbwkKO9JCQ84LqB8J+VtMKlw5nvv70n4oSGe/CehJ8/cCYKNUIz4pSG8JC5tyY64LOiN+qsgiXvt4d0UnfwkJemKy4n76yiZj8zVD8vwqzwn6GTw5tkQEx7Ci5CLPCQkqkiQfCRipdb4KuI8JGFsC9i4aCTeiIiXjLwkKC8PSU18JGxt1nwkY+KChxCGvCWq5TqoYI4wqlhyLrhiYpcQSIh4K2VWm0mCkJCQCY6OsO06quo4K+XJPCflbQ/cvCbspJ0OjprYuGOsfCepJpE8J+psXx58JG0l8i68JGMi/Cdkojgs51ce/Cfh7kKM0Ix8JG0ui8+4Z2QIUTwkJ2mKvCQk4kiRci68JCgiHvhpo5feUQtw7o9cuC6lOC1mHfDowpNQktSJvCeuZvwkYWB4ZuPLybwm4WR8JCdjvCQqYHitYJ08K6ZiFzwkIGF8J+JkXYmOeKVk/CflbRNa+CzlSbCv2Nn8JCurvCdhJDIui8KK0IpJtewJcOSw5vwnrmOPOC2pUngsq0v8JC/pjko8JGKlWg5wqXhnrPhpLIKDkIM8J6foWA9blTwnpOaCghCBs6fLihUPQo5QjfXsHvwkaSF4Ka5YeKAlUrisac6eW/qrJXwkJ2M8JCdkmVGUTxq8J+JkS8/P8Kk4KqDePCRtpFcChtCGVZg8JKRsvCQgYRr8JGWvuqdl/CQgZA9wqAKGUIX8JCGm1Lgq7lmNvCxm71yItGow45OTzkKN0I1yLrDvPCWrZRPN/CRjZDvv73wn5W0Xy9iSXXwn6qJIiI4VPCRtKAve+Cih/CWqaTXnUJowqUKNEIy8JajoHbgr4snOPCQuajgsZ3wkZy/ddGoXe+/vVYkw7zwn5W0XGou4K2q4KeCw6jvv70KOkI44LOIXPCShaFgfEXgtrjwmIiW8JGNly8lYCThpKIu8JCXnC3vv71cXPCWrb884K2IUPCRoKchJ3kKIUIf8J+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KQkJAw4PwkbS6Ojrql5ts4LWOelzwn5W0L++/vS7wn6u0Ilbwm4Sy6p2I76qwb/CRj4LwkpGx8JuyksK/PzouwqIlXwovQi3CpV4ubFtP8J+VtMKk6qyF8JG1oMKlYi8nIjvCpS7gqqo/Ru+/vSZN4rStfV0KEUIPLvCav7bwkYyr8J+JgnlsCgVCA31mfAo+Qjxc4aeaJvCrj6JRKmFcROK2oEFsUMO8KuGpvCLvuagu8J6lkfCfhpjwkKGFwqUyOkom4b2XXPCeuZRFwrEKKkIoYU1z6p6swqUiKPCflbTOjCTwkYiAwqfwn6uUdmklKzzwn5W04LGZPAo2QjQ5W+Cosy3qmYMq8J67sC48Lj1pIVHgqZFWI9208JOriHvqrKzIuiE/YT3RqFjgtr3wmKq2CjxCOsORJO+5szrgsb48MCIzWMi6wqXwkYGFXmDwnoCE8JGKjOCzi3h7RDzgvK3wkpGkJuC6iD3IusKpw7wKFUITOiIlST9A4K6jYOCth0bgsYpWOgo6QjhM8J6lnlfgsYBh8JCBg1xL6qypKvCeso0/4reO44iYYfCWro9CSyrCvdeyw4rCpeGjgMKm4aCWLwovQi0iJzZgJiVJ8JG0glwi4oyj77+94pedJk1QcfCRk5cq8J+VtDQv8J6EvOG+jGgKNUIz8JGcvvCRr7Z2NjdAJmA68J64gS5NeG7wn5W0PfCdjbbwnri58K63mUov4KefVPCct79hChlCFyrvv4/RqMKlLyl477+9w7oqQuC3ij8uCitCKSLwnoWP4KuQQXpkffCeualTVuC2g+CwrvCQlo9yLfCRjIbhnbLwkbaTCktCSdGo8JGMu8OnTj3gqZrgvZDgt7M9yLrwkY2QyLrgs4hZ8J6XkSQq8JCjsPCav7rwqqCq8JGInOGOjtGoI8Kp8JG0gC5KdXvgpoUKOEI277qj8J2SnsOR4oCByLo/yLrwkbym8JuCnvCTgqo6VWE/8J+VtGApyLok8J65pOqvt/CfqrhNCiZCJDpK4o6QJeCvjEvwn5W0PPCflbTgs68k4K6V0ajwnrqi77+9Pwo0QjLwlI+Fej3vv71g168mZj3wn5W0J8i6IvCeuYnwnrike3o+Rj8u8J64uULvv73hioMrNwo4QjbwkKimNiYk4LOg44KcL/CdnqDhj7vwnZSA8JKRklwyw5HCpH7wrIWTJC/gtY89SOCyhsK9LUgKRkJEUPCRrIBc8J+VtCLhsL0qOvCQnoTCpXTwn5W08JC6muGKjEDwn5W077+g8JGMpuCnsPCfgZI/4bCNLy9cOSR7dvCQoLwKHUIb8J6LmjzRqG4saCLwn6ujVeG/jkXRqGZTJic6ChdCFXtcJu+/vSdFwqUq8JCzpVsl8J+JkAobQhkn8JG8qFxgTcOcRzLwkaK6K8KlzpXvv70mCipCKD0/8J+VtD3Yje+/vVLIulbwkLKh8JCOp+C3n/CdkJkiYyZ7OEhfIyIKD0INJPCRkobwkYGZwqXCswo+QjzvrLgvPSg2wqXIulnvv73wn5W08J64nfCQqIYpJNGoemwu8JuFlci6ayom8J+VtO+/vSwkQyLwn5W0LycKNkI0wqPgrp/wkJ2m8JCsqiLvvolEdOGAkycmfVfgqYcl77+90ajwkbWsTeqnlz3wn5W04b+XXgoQQg7vv71Ddns98JGWjkhUSAosQirwkbGnJmDqp5A7PVM9RSbvuJMnZOqotsKp8JCguC7wkI23W9uge+GktC4KDUIL4K6ZYPCbspclai8KKEIm4K2IJjrguog977+9PcKlPyPgtoF74rawQ2o04LC98J65rifgrqQKOUI3JvCRipTwkI62JCXRqGvwkJ6IcyckJT1sIfCdkqZE8J+VtPCflbTwkJ2MJPCRrIPwkZK14bCoVAoHQgXwnrmhTgo+QjxjPPCQobA98J+isPCfoYXDg/CQh5slJOGOlFfwn5W08J2YsU4ufSQkVC9O8JCsnvCQhIDRl+CmtlXjg7oKBUID4o6MCjBCLmDwkYik4YOH8J+VtPCQtJhHOuCuiu+9luCyjzTwkaSJIuGksifgqK5iPOCroUAKOEI2ImDDnD3gtr0r8J6KoCbwkaegIiLwkbG+YPCRjYQm77+9TTjivKY9a+CzrHt1d8i6TuC2giInChlCFyQq8J2anCUi8JG0vOC2p/CeuLDwnrmZCjNCMSDwlq2r8J6BhGAz4rSP4Kq5w68u8J65mTTRqD0/w6hgRvCRjakq4LCjKys88J2Lk0QKIAoEbmFtZRIYQhYn8JCWuDzwnoCj4rGoNCIvYC/wkJKoCkYKCW5hbWVzcGFjZRI5QjfwkY67yLok4YqGPGzwkI2eTtGo8JuFkvCfq5TgoY104LezYCfgsI/qp5HhpJDgqYAmPMOH4LGdCrQPugGwDwqhDgoHY29sdW1ucxKVDrIBkQ4KDUILbeCsskk98J2UjjgKK0Ip4L2G4KiJL+CvkFA88JG1gyrgq6HRqDpc8J+bue+6l0zNvfCehYTvuaIKEkIQ4bOUYFbhj4bwkYuxyLpSMgorQinCpV404L2pSCrwnrq3UCbwkI2EXOKCg+qphTome1lS4aWG4b2b4LGMXAoEQgLCpQpCQkBM0ajhnbIubCbikonwkbKSScKlY92F8J+gq+C3ii/wkY2B8J2Fkci6R+K3gPCRqb9v77+9PTrgqIVDIjzwn6qbChVCE++/i3tt8J6Fj+C0j9GoXC4tXHIKSkJIUGDgrII88J2Sssi6QyIkcuqsq/Ceua/wnZKf4KyDwrkiJ8Kl8JGNo/CWva/wnZ2GL0DwkISKwqXwnrqm8J+vk++/vTzwkJaACjhCNsOn8JuFtGTqr7M/IjjgophpP+Gjs+CznT3hp5p7L8OW0ah9K+Comt2E8J+VtF3grLPwnoCbcgoYQhbvv73ctVzgqLwkaSzwn5W077agNWlBCilCJy7wn5W08JGcgVwlwqXhv7p7Y/CQoIgm8J+VtPCRq4tT4b2M8JGPlwocQhrgr5Dwn5W0Jzrhv7QiLjrho6ZTa2vwkL6ybAojQiFG4a2gJ+K0rXHgppXwnp+gL+qmuV/wn5W0LuCsi+Cjjy8KB0IF4oCJLygKP0I9WiR88J60geCsvScuJvCRp4vwn5W04L+V8JCAmyPwkI2nWEomZ/CQoatFYO+svip98J2Su/CdkqJg8JGBnAoRQg8l7Z+t8JGMqF0uJEHvv4MKOEI276yD8JG0uuC2psO18J6Bqntl8JCoj+GJjfCWvpTwkKmQ8JGoqT090ajho4gr8JCdpSTwn5W0Ci5CLHNna0vDk+GKo/CfoofRqDfRqCXwnYWC8JuyiOCuqOChtFzRqFwuKjnIulw/ChdCFSTVkSpS44e14rSt0ahY4aqsP+G8nQolQiMvOvCflbR6JmXCpdGo4KGn8JGEo1vwm4Sy0ajhjrPwkIC8LwoLQglP77mi8J6islIKEUIP8Jy5sFzDgj8iIvCeuKQqCj5CPEQ88JCumy3qprvIuvCeuYlkJfCdhIvvv6bvv71wfTzgrZfgoZ7CpfCRtqPwkJ2mN/CQoLw9USoi6qmSaQoLQgnvv73CpeK2rn0KK0Ipw4A/T+GktlHgr4bwkZ2EY3fwkbCA4b+68J+VtCbgr4bwkKixPz0ubiMKGUIX8JCkg3lHNPCRjZc0PCXwkK2m6pKaViUKEkIQKu+5mnFe4pGJ8JCdo+CoggomQiTIuvCQh5fwn5u28JChnF3wkbCGMCDIulnvvYZPVy9ZJSc60agKF0IV8J+BieqsgfCeuLtfL1oqJyLwkKKoChtCGUXDofCdkrvgrYzgto1zYjXgro7NuuCunyUKDkIM8JGFlV9rJWVkUmM2Ci1CKyfguoTvv73gsJUl4L604bK+6p+TPDzhs5vitrXDkU/wnrmC8J+Hqmrqr4MKKUInyLrgoYDwkKOqaOCugyIlP+K2rU7wkKO14KuqVDw8PeCtojdE4b+mCkdCRe+tgPCWvLzRqPCRtIl00agv77+98J+qlnnwnrmkKTTwnLy0PPCRjo7vv73qr6XRqDx68J6xt/CQj5LqrJPwkY2ENO+/vQoYQhYq8JCmn/CRsbPwnZOr4b2byLom4aq/ChdCFfCTkY/wkLaO8J64p1zwkYqp8JGNqAoMQgrIuvCRqKzwkKC4Cg1CC/CQo7XDpHvRqM6JCjpCOHfhjKPgoJ/wkLOlw5nwkJ2S4KuJXPCeuqnwoYiDJjoi4LeDXC7vrJQmWlDwkJaM8JGmpi/wkLqsChxCGtGoRzrqrZNE8JCdoPCQhpHIumAvJfCflbQiCgRCAjo9CkJCQOCskFxczb57ZsK9KvCfiLhrInvvv4rvubJfw5XwkZyVJeCpnjjhj7ku8JCBizzCpfCeuZ/wkY+K76yUP17guqUKI0IhcGgkOvCeuqZK8JCgiCY9wqVcNeCmsO+/veCxnSrwlq2VChFCD++3jy3wlquZ4aa14LGaKgotQivgvpJI0ajitLzCpVzguoFPReCiovCRjqDCseGxkfCdlIjwkJSMJPCRtYEiCgZCBD/qqqoKLUIrJvCQkZNC8J+VtPCRpLcuRDYrMfCfoqfhkYovXPCQvoDgrIxL8J6AkT3RqAo8QjrgqqpuOyYv4b+YJ/CeuYlgOTrVpSbDsz3wlquyPfCRrIjCpWbwm7KC0agvyLpD4Kyy4LOiOibwn5W0CiZCJPCdkp7gqZ4i8J2LjibIuvCSk4Ao8JCrreCtg+GplEwkKn7CpQoPQg1UKuCupPCRsqdyJci6CjlCN0MzZS4iNfCRsZAnPeC3tPCwraZ58J+VtOCxo8OYMToiNPCQoIh7YC/gtoEt4K6e4YmbPfCQta0KLwoEbmFtZRInQiXgrLc6XuG9meCpgTrwnpe/Ljwy77+M8JCjqdGoJequtPCQhqAtClkKCW5hbWVzcGFjZRJMQkrwkbaVJ/CQnYfwkYSfJ/CepI/ftvCRv4Xwn4Ga77a4d/Cel5Pvv73grIc6JeqguGTwn6Cje2dFYPCflbTwn5W0L2Ap6p+R8J+DhAqnCLoBowgK4wcKB2NvbHVtbnMS1weyAdMHChBCDj9gwqVXJDEwJ/CdlJJxChVCEyfwn6qA4K6wavCQirEg8J+VtGoKDkIM8JuLqdWlJz3wkLqsCiZCJDzwn5W04aqY4KeoTi4uw58keyokYCU8w4JX8JGwnyTbr8i6OgoqQijCpfCQrqzDiHPDufCQjZgibl7wnrmCOvCen7Mn8J6fvD3gtYfgrZxxCgJCAAomQiQi8JGxo1UvRfOgh6olKvCfqazRqCI88JuygO+/vTwu8JGbkyUKCkIIP/CRjo7gposKEUIP8JG2mOqSnMKlTOC/l8i6Cg5CDPCQvYzwkLKF8JGqvgozQjEqKvCRnLnwkI2i4YuDZuGdi13wkLKOJvCQtbzwnrmL4KiPw4HwkKCBc8Kl8JGOi8OKCi5CLPCQobrwkIq6aOK1plQmPPCRvrDwkISB8Jy1i8Ou8JCUksO0IidnPPCRiopeCiNCITzwkIS78J+ComM1Ue+/ve+/veCvkMKlQCRFayrgqLJmOgoTQhHRqGDhvqU/PH7gprLwkIaWJQo0QjJ7IifwkYOwZDxqLsO6ZTrqprQv4KeX8J+gmXvvv71BdfCeoIPwnp+i8JuFlS838JCOjwomQiRNXHU9fe+/vT3DnPCWrJfwnrqm4KqQJvCego/guoLwkZOUwqUKOUI30ajwnaqb4aCK77+98JGNly7wkY+I6pqdJD0u8Ja1jtGoKC/qqps/WuqglGLwn5uh8JG2lOCmiwoUQhJrNvCRm4XwkJaUwrvwm4SyKiIKQUI/UfCeupF1wqXwkY+C8JuFlfCQnp9C4Ymk8JKUvXJFOj1OS1wuLvCRqJXgrqRYdvCUkKzgrZzRqCrwn6myQX1xCiBCHuCmsDzwkKOk8JOUjfCegIMi4KauKD3wkbunJWAnLgoYQhZ3J/CRpJNaVmrwm4Sy8JCLrybwnou/ChZCFCIlJ/CXlKvwlrqY4YmMJiQk4K6DCjNCMSJsPSZf4LCayLrhp6xgJeG9mSTwlr+xJE038J28huCsmzpYQi4u4Y6t8J6Lv/CupYsKDkIMPVRh4LGVNO2esMi6CitCKSZCL/CRgqkv8JarsPCQqYdkYPCfqbfgv5LwkY2zNOGJi/CfrL7wn5W0Ci1CKzHIunQvP3Uw77ePXPCRqod7XD0q77+9Tci6XOCiufCxs5NOXF4/8J65m0gKAkIACgJCAAoVQhPwnrmJ8JCnvPCRpIPgt4Rc4YOHChZCFHbwkY+KYOGJiuqfkzovPTtZ6qmNCixCKiJZKvCeuZLwnYuMJdiY4buyXPCRjZfRqCYlLPCQjL0u4Kyz4KKC4LyXPwoVCgRuYW1lEg1CCyLwkKS/w5pz4oC+CiQKCW5hbWVzcGFjZRIXQhXwn5W08JC6sfCeuYLCpSjgrLIkXC0KzQS6AckECsoDCgdjb2x1bW5zEr4DsgG6AwoTQhHwkpGxYNGo77+9PcKlezQkKAokQiLRqOCzldGoOnlT8J+VtPCQqZIkQT968JarsjLgqLV7wq92CidCJdS+Ins6JDrCpSLhprMqaT9KLsK2XSLwnoWA4LWOT8K38JGyqWAKNEIybci6QCXwkJSkLy97762A8J65nzou6qeC77+976yC8J+VtMi677+944ChceOFiPCTi5YKDUILPEw/P+C4neGioXIKEkIQIn49KvCQs5vgqYfwm7KGMQoxQi9b8JaqouGgizPwnrmbPSfwn5W08J65vnYtUuODmeGJkiZgZtiXR1E7dybwn6CDYwofQh1B8J65lHrgq4Uu4KmIOvCRp4AiQyR9VeqSoci6NQo3QjXCpXvDptGoVUZcPfCav7Ik76y+UHA6fi9YXCQk8JCzvzngq6Iv35fgpo9E8JG8sMKrwqXIugoFQgNh0agKK0IpNz8pLiomJuOAjPCflbRGJjgieyJc4Ym+4LSOyLoib/CRtqd7IuCotj8KEUIPQ00/ZUEh8J+vgiRcIjovChNCET3wkISBKsKlyLoi8JGkuF0lChJCEFzwkY+C6pus6qKvJOCksXsKOQoEbmFtZRIxQi8mLvCflbTwkaeR8J65gi7wn6SjJCdgZiLIuuCviD0k8JCOpSJg76yC65+jM3BscAo/CgluYW1lc3BhY2USMkIw8Ja9s/Cei786P/CYqL09MvCRtpjwn5W08Je+qMKl8JaugT1Z6qKVL3glyLrCocKlCogDugGEAwrJAgoHY29sdW1ucxK9ArIBuQIKDUILJvCQgYlzwqVbLC8KF0IVKlw177u68JatglzgrqNBd/Cei78kChRCEiY84K6aKlzVkio98JGklSIiYApRQk/DovCeuaI8Q/CflbTwn4miJDNO6qeW8J6lmfCRjYElwqV7PsKl44Sx8J+Hr/CesprwkpGy8JGsgGjwnaW54bGn8Jq/s/CRpZEuKifwnqWXCjBCLsKgSkpcL3vwkYqIVSXvv71wyLo/8JGAimrgp5fRqPCflbQ6cU7ihpvYm/CQo7UKB0IFSioqJy4KMEIuKm4/8JC7hMO/KvCbhZLDj/CQjovhpKMiSPCeuY0uP3jwnous8J64rUlj8J+VtAoIQgYl8JGwvnsKG0IZ4rSMwqU8ZyLwlr6c4LCeUeC3svCWq4cnNAoIQgYmT0ZhLyQKCEIGRiRHwqUqCg0KBG5hbWUSBUIDPWx1CicKCW5hbWVzcGFjZRIaQhjhpZtXZsi6JMi6KT3wkKmC8J6Xv03gqLwK6gG6AeYBCqUBCgdjb2x1bW5zEpkBsgGVAQoQQg4wdznwn4KFeyo88JCmhwpDQkFJbi7wkaSB4Ka2XF3gs4pRJOCqt/CeuZspV8Kl8J2LjPCRkaFgKnlsL/CRjYzwkKaE8J65nSJ+e/CflbQ94KquKgoQQg5K8J+EmfCQhqBiSuCqngoiQiDwnri2IfCdvKgkb1YmeScmL3fwkYqAe0M9P3s9JdGoewoCQgAKAkIAChUKBG5hbWUSDUIL4LmOZycnOvCflbQKJQoJbmFtZXNwYWNlEhhCFuCnh1wv8JCmgMOsLC/qoLU9K0p7Xl8KjRu6AYkbCr4aCgdjb2x1bW5zErIasgGuGgoXQhV777+9YfCQgIdST0TgtK3hjoBXMCIKIEIeyLovPeKhojol76yBPyEiw6Tvuaovw65JKlzwnp+tCktCSfCflbTwnpe/8J2ogPCflbTgqLJ+XHbwlqygUO+/m+ChpuCghyJAWiZS8J6EqfCQgLdB4LSGOFdqwq/gtYvgroV48J6lnvCQpK0KJEIiXPCRpqQ88JGClOG8mfCRgZnwkIaa4LK+b+qglybwrJGZJwo5Qjc4Kmp7wqUn4aev8J+VtOCnoD3wkLuDXC5gJC8l4bG+8J+VtO+9re+4qSTgvofVtEsicvCeuYklCj1COyrwkKe+6p+YTe+tg/CdlLsnPci6QCTvv71cdDTgqpHvuqnwkIGFNzgmJSfwm7Kd4KCo8JCyqeCguD84Cg9CDSPwn5W08JaqvPCQpIwKKUInc+qjkC97KnYpJfCRj4XIuklnaCV6X+K2qOCuk2B1yLo9W+qssnNYCgRCAmBsChVCE2oiJVp5TWU0LvCflbTgoaElYFgKOUI3S/CRjIDwkayJw7zCvtGoXCY9L/CRjZdIKSUpLlc68J2RqvCepIDgrYzirpXgqL7wnrmN4Ki5VgoiQiDwsbqLOipT8Jy4gvCRjovito7hio0l8JGkjzQm4Yq0LwoeQhzgrZd48J2qnfCQsqbvuZkmP2xb8JapmPCfqaYlCiBCHuCwpHwm8JCOlfCslKsjPci6fCdcQOCniOKDo+GDjQoQQg7Dp3XCpVE/ezp78JCouQoOQgwvJm5G8J+VtCYuMiwKCkIIP+CpjFwkPzEKM0IxJfCfq7fgrZxyMSU9LuCoiS9q8JuymU7wlquyL/CRm4Mu8J64r+KtvyYv4LOK8J+psAoPQg0u4pyZXSou4LufOiRFCkZCRM6YVMKl8JCHp3rhv5ho4K6xPz8qemDhpLUv8JGNl++7u1bwkJaVL+ComuGKjfCQo7Thv4A7Neqom3A88J65lPCflbQqCj5CPOCnl8i66qW5Oj0/fNGoYDfWjfCRm4LwkZeCSeGOjTMmSi7hvLNMLiLwn4CcYjrhi4V08JGPiPCeuaHDsQpCQkDCtvCfiYLDkypdemzwnrmda/CQqZDhpbBge3s8ZUPDuHvwkLSjO/CflbRiUHbgo7/wkY6L8J+bpPCQpq1gJs6MCgZCBPCeuKQKCkII4oKMJS7IulkKOkI48JGKhS8iw5fCqe+/vWF+8J+boi/hp5ngs6FZfSIvV/Cfqoh4JfCQnaR78J65t+qggCg38J+AnDoKSUJHTydF8JORlfCfo4HgrIbwkKmYJC8i8JGNl+CqkeCwijDwmKeF7Z+x4LqPOvCflbRrJWBs8J+Aoj7vv73wn6ux4Zqq4YyVP1AKNkI0W+KRiiLgt5bwkJeJ4Lev8JCdjeOEitGoLifguok6JfCehIUi6qmRIvCRnYTwnZKNIN+oPQoYQhZOJeK1sCTwnrqiXSTigovwnrm34am7ChtCGS/wnrm3LlDgt4rRqPCeuKR08JGLoPCdlIgKDUILOuCsmybgq5BuPyIKG0IZLl/itr0v8J6Lv/CYtIHIuuKRhjwn4Ka3QAojQiFCTS7wkLWq6qaHP/CQk59Xw4IiJeCoj/CQmJnhiZhqLi4KLkIs8J65vGtc8J65p0skT+qpvfCRirnRqHI88JCGoFXwn4K015Pwn5W0w7Q9WEEKCUIHPzx76queawobQhkjXOGgqsKlwqJCffCUkJ7wkY6ec/CfiaAnChBCDvCeuLvwn5W0KirwkY+hCkZCRMK7yLpmYMKk4Kyk4Z2A76yDVfCfop7vv6Bg8JCgjSYiLtGoXUjiuqLwlrWs1Z/hpox9T/CepJDwkY+KYOC1mPCflbQ8CgJCAAoxQi8iIi84SCJj4b2Z6qOAP+CriFPwmr+68JGKiz0kwqVI8JGLtOCvsWBjTj9sc0A/PQpDQkEv4KmeLeCziCUj4LuOV/CflbTwkKaFeuGjgXngt4HCpSZcJC8kJMi6buCvjC/wnrih8J+iu/CflbTRqHvwkKSIdgoqQijwkI2mQSUkXDzTilAvfETgsZgmLsi64KmeKiQ98J+DjUDCpVvwnou/CjZCNFzwrbW04LCV8J65ly898J+mgFkk0ahl8J+ptS7wkKiBcfCSkYxIwqXgs4fgpo9kJPCRvrAKI0Ih8J6frT3wkICI4K+QwqV18JG0uiI9wqXvv73CpSJHKtGoCi5CLPCRi5jIuty9P3YqOlZqRvCegKPUunQvO8Kl8JGKlDLwkKCB8J65vPCeuYIkCg1CC0xgJVhxcnHwkZuTCgpCCPCRu7HhqbhyCiBCHi8jL/CRsbHRqGB2R8Kl77+98JCAtPCWvodg4K61fAowQi4mwqnwnaqf4Kq1e9iZ8J+rseCunOC2myXIukIl4LOGMGA/Lj3gr7rwkIuydVUiCjNCMXrgqZ7gs6AnP+GLtTrwkY2wbyvwkauo4La3YGzNhH0nLPCQrpw/VfCflbQg8J+VtC8KPUI7Lz178J+VtOGMkjVK4b+K44iL2Ibgu5MzaPCQoLzwnoCn4Le08J+VtOGgk/CRpInwnrmZPSlYXPCdlY4KBUIDJVg6CgtCCXrwkKC0fe+/vQoMQgrwkr6zJvCcvYRSCgJCAAooQibwnoS3aWBAP+GJqGDWg+C3rkpwQFzRqOCqieGfpfCQjJY88JG+sApAQj4z8J+ikfCflbRmJvCeo5RqJi5vP3zwkKCrJPCeoJBV8JCesvCSlJDRqMKl8KqzkXzwkJiHKvCRk5lYP+CvlwodQhvhqpAhPTwq8JG1mfCRjovhi4kqRGDgsrUuw4IKJUIj8JGOjvCRjqbgrJAmJNWePD9BPPCRj5QqIuGKi+K3mT0/KnYKCEIGJybwkYexCjZCNDxsVj3RqEXCvyXigJA24La1XcO34Y2Sdu+4geK2uOqco8OfL+CrpnxQPNafP++/vSQkPyAKO0I58J+VtOGLv/CRoJV78J6AtzR38J6fqu+2ok0/IkdKP9Wx8JCetC7wkICGYFxyJOCxhi4hPCrit40uCjdCNT3CuuCpke+/oyXvuZ3gqLgm0ah94K2IPyhc8JGOjvCWq4bqnKnCpfCQrbvwnrmpKj/gt5Y/Ci9CLS91e1zhjabhv5gv4aeY77+9RmB777+X4aCWLypCPjokyLo84YONLmx08J+VtAoPQg1GaiTwnrm+4LKUPy9kCglCB9GoauC2uyYKB0IF8Jq/vU4KGEIWafCel6nwn5W0wqXgr4zwnoCk4LafagoeQhzNu9GoL13wkLKhXCp+e2/gqp7wnoCQ0agn34VNCg1CC+qonO+4l2px4K2IChxCGsKg8JCGlCd88JGKiCLCqCJAXDFcP+Cun9ewCiVCI+CzryLvv67wkIGQcuqqiGLDhuCoilxpRC7wn5W0IuCnnC4qCgZCBMO6KmEKPUI7IvCen6YhXPCRqIbwnrikPfCfn6fCpMO8JOCngjrwnZKmJiY/PfCflbQuKi8kwqYj8J+VtMKlNkFfw5gKF0IV4aWAPe+tg+C7nuGKueK7pSLwkZq4Ch5CHOqfkDpce+Gsv/CRtpNOUkM6I/CegIbhq4vdiCIKEEIOKu+rjirvv7098JCDmSUKI0Ih8JGDgmfwlI+iUOCmtzovK+GLleCxu/CQlrbCpT1IXCRwCkdCReqkl+qsuSR94oKrcuC+rPCQhpUl0ajCpfCWvZ1c4LOd8JGMneCpkURgwqXDvvCdhJN5ICLwn6KVPzrRqCTwkYqhKu+/lAoVQhNJwqXwkZix4Z2z4Y2o8JGMj1MlChdCFTo2Y2A/8Jiwkycq8J6FjldT8JG0iAosQip7d37wrrOkSfCRtqngpobwnp+r8JC6qyfRqPCfq7N74YmcbmjwkYuxSVwKKEImRC/hvZ09NO+/vfCfqq3wn6q2L288Py19YOC2gkHvv7068JGnnHEKLkIsLvCflbRc8J+VtCwp8JCeuuKLmOK8knTgtIZdP+CzlXnwkYOw0agmS/Cel64KFEIS4KqRQF4uZ3jfgy7wkKC44K6wCilCJ19cZnvgs5Uk4b+tLjHgsLXwn5W08J2Su8KlWOCoguqhtyRg4LGEeAoYQhYl8J+VtOCvkHYmP+GPmGDgra3wn5W0CipCKCbIuvCQqZZLayfgtrvwkauK8JaujfCQqLXwnrm18JCWlG9iKtGoLmsKQUI/P0DCr/CQoJlmPOC3mMKlUyfwn5W0XOK4my7vv73hs5LhqYA877+96qC14LmT8JCouH7wnZKmfWJ7O/CWro8/CgZCBCQl0agKAkIACgRCAtGoChdCFWlg77+9Ii/wkKeNRy1E8JGPgsKlOQoyQjAqOnvhjYnRqCrwnrSlZsKl4KuJ6qmITDjwkKC88J2qojok8JyxklPwkKS/JPCdlYMKG0IZ8JC8sWfig5bwkbWkX+C5j1wv8J+VtCFuXAoOQgxc0ag34ra2yLrgp6EKI0Ih77+9XMO+8J+VtPCWv7Bf4Kma8J2qofCQpqHwkJ664ZyhCiEKBG5hbWUSGUIX8JCGoOCnneK3jkTIuiIkROCnt8i6PVUKIwoJbmFtZXNwYWNlEhZCFFsvZ/CQoqg/PVzgtaIu77iGTcO6CvkDugH1Awq1AwoHY29sdW1ucxKpA7IBpQMKOkI4IvCeuYsq4Y6RIvCfm6vRqDjwn5W077+9P8i68JG8uPCWhKInwqDwo4ec6quxYT898J+VtOCsqy8KJEIie/CQgLQlaCJ78J2IgOCrifCQurAl4bC+77+9Iu+/vci6agovQi3itqLRqCJbceG8uT9UfT/qrqlbPOCznnvwkLOeRCo6JWLvv73wnYG3efCQto4KN0I1eGDIuvCRsoJE8JCnivCQoL8q8JGvlfCeo4/gvrhrJ1/grpzwkbaQJvCQq5nwkIuw8J6Xo3EKO0I5b8OMffCeuoTwkZiSLT0/aS1c8J65ieqXh+qmgCQmJ/CflbTqmYHwkLm4PfCflbRgVy/wkZOYXHFbChJCED3DvVLqk4Eu4KeDe/CQlq0KF0IVXHA54reG3ZYq4KyL8J2Qm0DwkYyrCiBCHiI6KC9nJkHwnoWHJD8k4Kqf8JCohidNwqUnY+GikQo+QjwqPDMk8JatlTx7XCQl8J+rnyIu8J60kj1c4YONJfCQtYU94Y6GKPCTkYUmP/CflbTwmr+xwqXCpeCviycKC0IJ44eGKvCWqY4tCioKBG5hbWUSIkIgQz/wkYSTKjg/avCQlbpb8J2qmy8pKuKBuPCflbQiWSYKDwoJbmFtZXNwYWNlEgIIBArNHroByR4Kgh4KB2NvbHVtbnMS9h2yAfIdCjNCMfCRsq9LKvCdi6c6PPCRjaE1Je+/vfCcvZ7Duz9WLloqMnguP3DDkfCRjKMqNdGoXz0KE0IR6qex8J+VtG7grbA6XfCfgq4KFEISIfCWqaLCrD/wkZiUUT3CvycvChZCFHbhvZ3wn5W04YK3L/CeuYvwkY+KCgJCAAoRQg/gu4bwkaiB8J+Gpybiu44KIkIgej3wn5W0fPCeuqJPOTpIdzQ2P37hoatW4Ki58JGLsS4KC0IJe/CWrZ4i4recCjpCOCHgqo8vw5DCpUvtn5vwn5W0SUbvv73wloSW4ruLeOGdr0nDu3s64aya8JGCn++tgc6Iw741KV09ChZCFMi6LysiL/CWq6M6P01zeycqYsKlCjdCNeqsrlzwsaKHwqV34KeHL+GJuPCflbQvdUsvJCLwlq2s0agk4LCFP8OK8J+buFxUWT3wnZSRCgpCCDxE8J+VtHUiCglCB+Cmvz1JRysKCkIIL+CtrvCfqoUKGUIXLmDwkJaFMfCRpZDwnrm1OvCRgKxcLToKGkIY4Ka/4aWYYPCflbTgs4w+4LCnwqJgyLpkCghCBion4Z2FJQoaQhhSJzfIusKxOvCfm6knXFzgtYhc8JGRhCQKMUIvZyxcRkTwn5W0yLok6qmE8KWCuuCog3s9w5Hitqh5Olw58Jq/vi4uw4si17TRqCYKGEIW77+9PuGlmvCQpL9tL8Kl8J6FiSRcWAo9Qjtse+OAkeqslu+/vSnhirNsJO+suOCkgS4mPe+/m9GoP+CziGIn8JCZmvCfnKwu8J2Spi5qyLrwnrmkaAo0QjIyWT/gu5nhp5jCpeKJokPCpT3wkKigU8OgJvCgi7HIuu2fgmNbwrh1JfCflbTwn5W0XAo4QjYiMvCfoaRcI8OW8Je7iDw6ccKl8J60umU9J/CbhLIl8JuFkvCegKZW4K62J+K0rcOrZfCWq4gKPEI6JmngqLLgrad28J+rt+CpjPCQjbk/8JChiFbwkZmr8JG2gvCRvrDwnp+jLi7qp5c/Ljsq8JCKguCuqAodQhvgr4cqLfCav73IuvCeuaLwkKOp8J+VtCTvv70KIkIg8J+JoeKYvl0677+98JG2iS0k6p+b8J6BnTo6e/CQqo0KBEICb1wKPEI64KaIZPCflbQu6qyw6qeR8J+AhDNBXznwn5W08JGxp1bDtEjwkYyTVeCss9Go8Jarsci6OnRCNeGKigodQhvwn5W0Pe+/vUvwkY6O8J65tOqjls6E4Ke2UV0KMUIv8J6Et/CRj4I64LmEYzxqa+GlsvCepZI/0agwdGzgqoHhsYg/Olw/8J2SgOGMhUAKIUIfwqXgvpc38J2HmFV7JXw64YqybeC3lPCflbRkJ8K5LgomQiTgpp/wnrm8e2MmLjrDkTzqoLhdJsi6b+CummzwlqmFJ8K4JkIKK0Ip4KeXPe+2jD0vYCU88JCtryTit4JMKltWa2Atw4ps8J2UieqvsPCdlYEKPEI6PDzhvZsqyLpYfvCdi6PCtS/wkYqaLlUuJ/CQroJZ0ahI77+L8JGDtDrqq7Lhna9i4LqeUMOdJCxgMwoMQgomXPCQq7HhqbB1CihCJvCeuLJPw7l+JEQv8J+hlfCflbQlT1RO4KeC8JGNkGPwkKm+4YmWCjhCNsi6WG178J2Su/CRhbUtJfCfq6Bv0ahbe+CogvCWtZxORCHwn5+qzoUn4L+S8J64pPCRiLE/PQo3QjXvv5spw7Yq4KiyPfCWubs54Ku/8JCooSwvJvCRjJAvLPCQvr/gu5R9PSpkN2Dwkb6w8J2EpQo0QjJcZvCflbQ94aCHe+ODsizwk5GK8J2qpO+/vU4lWvCQqYM8JuCtofCQtaNY4KmcOuGDjQoCQgAKNkI00ajgs4gwVSfDkHrwkb2VQMKizoUqP3Uv8JG7svCdn4FbJMOg4LyE0agvI++5kS3wkY+PLgovQi1WR3nwnrmU4LG4b0PgrKIi8JCjtPCRjbRU1bg4ZUA/PdGoSntWUu+/vVwjw50KFUIT8JGpvz16JPCRrIUk8JCLieCuvgpLQkklNc6H8J6Km1zCpfCTsojwnoCz4La2YPCehYBK8J2SvuCzgOqqilzwn5W08JatkvCUjpTwn5W0NvCdkL4l8JCLsS5p77+94YqiCjlCN8KlOPCeurkq4r+2IlVAwqXgsYR3w6zhmqjIulbIusKlP+Cug3gv77+9Jz/wkY6LJCc8PS7hmL8KQ0JB8JGwiNewOvCQlrvCpeGljisl4K2Waicv8JCohcKlJTrgqYc/OvCsloQke+C/mjDwkbWo4b+4OijikYXgsqTIunsKO0I5OnDwkZa+JfCRrIJMwrh+bifDtfCfqpbhpqrwkIC88J+tvi494KGpJjpF8JCEgULwm4Sy16HgrIFNCg9CDUjwlqG+Ljzqn5Aqe1gKGEIWS8i6PXjhjJIi4KiPOvCQgLLgrZwnSAo+Qjzwn5W08JCRlyLgs4zvv71WOuK2u+C/i2DhvYzwn5W0YHbwkZOWWD9EPcKl4bKX8J6hm8i6yLon4oCJwqYKF0IV8JG1gcOuw7HDmPCehKU/4b2bYiQvCiBCHmXhv7Y6P+CqkT3CpWFQ4b+L8J66r14uLlzwkaijKgoHQgVHyLo8PAoRQg/wkY6+Zlw90agl3ppnKjwKJUIjYGrwn6OA8JG0rjrCpXtTJe+/vcKwKPCeub7jhprwnZKfJ0IKMUIvyLo8yLrwnpOoPfCWq4XwkIGV77+98JC0iyI/8JORjCJh8J28pkrCpSRp8Kqro2AKDEIK8LKAgNGoXCZVMQotQivgrpw98JGyreCtoOK0h+CmsvCWrZziups64rWv8J65l8ONPfCRjJDVkylICjxCOjoka2El8JCXkSRx8JG0gWM64K6DXCHqpp17N8K6LXLIuiLwkbKT8J+VtPCRr4Tgp7XRqPClhZHDpjQKEkIQ8J2Uh/CQuqw/8JCeuFfduwoSQhA3Jycv8JCXnV8qwqXwn6GTCjFCL/CRtLp+Xsi64YqNJ1Quw6TwkJaa8JG8tTxcWz3wkKS/OjjwkK6c8JCAsntUbns8CjZCNOCzgSd78KuMhknwkKS/77+E8JCWsy89wqXRqFzDtuqpkW0m4KGe0ag9LCpCw4vgr4LqkqMKMEIu8JGNly7hoJd2REB06pKkLU3gtYZR8JuEsiThp5TwnZK08JCTqsOlyLrCpeCrugorQingsq7hr73wnpe64LmWLzpJeT3gt4bgsIxu0agiJjzCuX7wn6m78JKRsQo1QjPwm4WV4LKgTvCRnKrOifCflbRbe3TCpSzwn5W0fC7wkI+K4KmcPPCflbTigL4v8JKRrS0KO0I5eDrCqi448JG1hSTitKfhvZHwlq2ge++/hUJbPe+/vTpRUS7gqLbCp+CtjEjhjIAi77+9OmFr4b2MCkhCRlPDnMi644GF8JG1hyfIuuCskF3gp4cn8J64pCLwq4mUK/CdhIhswqAi4Ky34KC68JCgiC7wkISBOPCfg4g/JEJtJPCdlYYKC0IJZPCRtLzwnrqwChdCFTrCpTDwkaSDPD0m8J64u1wuJdGoIQooQiZg3IjwkY+Y8JCAvGN7fiov8JCMmWjhjpRX4LWqas6MSXAqTjTdoAokQiJmKuCtlfCQtYjgr4Ltn7jgu5g0JyRMevCdkrJAPS89YMOdCiZCJCLRqCgt8JG1g+K3ivCWvLs4e/CRjLNu77y4LzQkJn3vrYRUNwoCQgAKLkIs8JGPk3jRqPCRu7Q8wqXwkaeh6qukcDTCpTHwnoS14Luc8J2bgCtTXPCfh7wKL0It8JGwhO+1t0VXJO+/vSfwnL2GKjw64Ky38JGqjXY/8JGDuMi6SCs977+94LCGCjlCN2AkdPCflbRkYO+snSTwkY+CbPCQhLDwnri54LuD77+9JyVQe/CRm5xm8JCEgeCss3Q6bfCeuaQKNUIz0ahCQOCxmeCxg8i68J+VtGNH8J6foUdRImAk77+94ayPwqU0w6PwkY6H8J+ioGlc77aaCj5CPFzwnrqMKuCxgiXwkK6abCfwkb+vJfCfqofwn4etOjo/IfCQjofwkIC8UvCoqZNyJH7wnaqdOiY28J+VsAoXQhVrMSbgso97PWPwkY2g8J+VtENoyLoKCkIIYOCxp3Ths4MKGUIXXGMnLi8iS8OEfEXIusi60ag6JvCfoZUKGUIXKuCoiDwn8J+dhe+/vfCRtLwg8J+CujIKOkI4VHMl8JCAsiRvJOCujmRy77+9wrTwkbKY6pKSwqUu4YuC44GJ8J2Ul/CQkr1F77ivP+Ciq+CxnSgKKkIo0ahGJPCfqrcuPy4n8J+VtH4qwrjIukrRqEjitqwl0ajwn5W0L+GcqwogQh7wkK6cIXLwnrik8J+VtPCdlInwkKCAU/CfgqByNHsKC0IJNWzwnYuP4LGNCjpCOPCeuaQ/4K2W4KuI77+aW+GKtSrwkauyJSUl8JGEv+C7geK2sSAiJMKl8JGcl3vwlq2beT/OmydcCkBCPiXwnrmL4K6/PPCQq60q8JuFp86a8J+CsyJ7JPCQlrwie/CegKpjLPCbsohEXfCdma3hs4bgrY06c/CflbR5Ch1CGy9DXHPwkJuH8JCyjfCQnaTehvCflbTwnY2OMwoRQg9jYDzIuvCRgociJvCQvZIKJUIjKnBVK1LCpeqihy8lJ+CvgV5U4Lq94K2L4YWdwr7grpQ/eyQKLUIrSWvwlquZLSHwn5W04YqEXOCruj/gqIPRqPCflbRm6qeYKuqZreCor+GpuwoxQi/wn5W08Jq/si9g8JCWnzrqn5NF8J2TufCRipon4Kqr8JGDnCovdUY0eXzwkJ2GewoHQgU8LuK4ugouQizitKdM8J+DpPCfg47Iui808J+vqmzvuakuPW1QXPCWq5Ri8J66o0Lwn5W0OgouQiwnwqVg8J6XszonwqUu8J2UifCRtIEncDNG8J64pEEiQ+Cru++/veGPjy8uRQo4QjbwkKOn4LOHe/Cfh7RUYMKlOtGoVCbwn6274Z2yU8O6Q08ud/CdlY4vMSfRqO+/vT89PfCeipYKIUIfJ+C3nCLwkY+I4b2dLyou77+94Ka5ImBU8JCAiuGsgAoxCgRuYW1lEilCJ/CsnYA8w7rflUDwlqmk77ePZ2vvv73Duk/wn5W08JCEsnnwkYqdewoPCgluYW1lc3BhY2USAggECpUZugGRGQqdGAoHY29sdW1ucxKRGLIBjRgKHkIc4K6VPybwkZaAyLo4Kj3wnrii4K2z4Lql0agvIgoeQhzwmr+38Ja/sFLwkYyn8JCdkPCRioguaSd20ahBCiVCI3HwnYSdYDom8J+VtCJrwqVWJmJ7fSXwkJauL++/vS/wkYyyCgtCCfCRtaRqPiZ4XwovQi1VR2Dvv71XY1Vx6qmQL+OFgCpx8Juyn8Kl8JGcvFEuK/CQgZrwnrSP8J+CgT8KMUIvVDBbQWh4wqUqPXs8RuqTkjJ78JSXqvCQoIRE4r26eyXgo4k94YqzXD1ETe+/vT0KI0Ih4LqlIiDwkYWz8JCWuz8lPyXwn5W08JCNr1w3KmrwkYSWCjBCLuCugyRLPfCQrYTwkbutMjpZbOGBiOqrreCutfCcs5fwkaSVYC/wkYql8JarojgKOEI2O2DwnrmCVCJb8JGAuy/wn6CvaGt6ZfCvpZzwnZGPd/CbhLLwkJ2mY/CdlZBg8J+hkD0v77+9CgtCCSU88J2LkltkcgoPQg1R8JC9t/CeuKldfsKlChVCEyJg8JCWvOG/s13DhMi6YMOHfmEKCkII8J6ft2U6dycKA0IBeAoCQgAKHUIbOvCQhpbgt4TwkZuZP3DwkaSRL+GJlPCWq4R9ClFCT03wkYu2w5Ztw6TRqPCRgqF7JcO9ReGJvOC5iiLRqPCRiI/wn5W08JGkuOqpl+CstzHwnoCdeci68JargvCQlrnwnrikwrk68JGivHvvv70KJUIjJvCQlrs8Lsi6L+CwjMi60ahKyLrqn5bvv709w4YlK8i6wqIKBkIEJmvIugoCQgAKOkI48Ja+mvCYo7LwkIKz8J65nfCegJPwn4Kk4LOG0ahF8JCHoDw88J+VtOC7jsKlLOqpkSXCqTrCpTwKSEJG4YOHJT45XcOcIvCRi7DDvfCSvqzwkIuJ4LOC4KasLsi68J+VtHtM8JC8jDzwkb6wN2NU6quq8JGmpvCflbTgsZ0l8Keiqgo1QjNVbiftnrwme/CegIZpRPCRjYzwkY2yNOGgkiZ28JapgfCdnY06fsK/8J+etU484L+IYHIKMEIu4b2b4L2oS+G8tOG8mXk6wrI6JCoi4K+y8JG1vDphdcOs8JapleqrsD9RyLp9QAo+Qjwreu+/vcKldmtcLvCptYHIumXwn5W0PvCRsZBc4K2IcUdge+GlpfCQp7BsQ+GelfCQubfwkIGYWG/vrLwKJ0IlLvCQspXgq7s98Ja9rFLwkKi4KUNYPe+krDx+YOGlrSQiaSp9RwoVQhMk8J+jgU3gt5Lwn6CZJfCRvZRTCilCJ8Ofw4cv4LOe4Kq2eCU68JiAvUZgPPCfobY/8JGMpUojyLrwr6KScAoLQgnwn4+JIvCRpIkKBUIDKjsiCkBCPvCQjLFiL+Cnn9+S4aep4KehRuGltPCQvLpj4LOje/CbsJIl8J65ki8nT2U88K61ksi64LOHXHAiW/CWq4JcCgNCAToKI0IhXDQ6Je+5sfCQvb89OTzgsYPvuZHwkKOk44WqJ2bgqLl7CgpCCD7wkYyX77+9ChxCGvCdmqnwnrmLSfCbsLvzoISMTS3wkYaXOjdvCi1CKyxO77modOC7jPCRjYvwkauU4paUPSZIyLoo8JG8hCQkJvCQnaQiOirIunsKKUInLnV7ekokVOG/oz0m8JGxlSYy8JG9lVg48J2VhC7gtrkqJjrwkYyHCi9CLSR7w4DvuZ7wkbGAXMOgYDXwn6qu4K6p77+9yLrhvYzCpSDwkIKQ8Jq/suqgpAo+QjxL8J2GqcOa8Ja/sCBcZVhFwqzwkZGd8J2Vii7wkbSC8J67sC57JfCegKPwkbyBJj/goaHwkY6L8Jijni4KMkIwS3vgrpw/XsKsL2Dwn6OBLl3qp5NjPy46Z9+/VSLwq4Ww4KeI6pOUYOCoviLwkIGFCgVCA+Gelgo2QjQ94KivPOGssi/DmGg9biovIz8kV04nJ3krI+Gaozo4efCRjLhc8J6fq++tgXDwlqyT6p6KCjlCN+Coge+/vXHDkFzwkJaUPPCRpL7wnp+pyLp3VnFQwrw+L+GomvCdkp576qiiJ1Nf8JCWkPCRtacKO0I5wrxi4LeyayolM1TRqPCdkZbhqqsi4K6OJCrwkIC8PcKlb/CQoZA/T3zwnrmX8JGMovCQnqLwkaSWCkhCRlzwnrmZ8J65qj3RqD5DIuGlh/CQoYV0e/CQu7/wkZaRJXzCpT0l8J+JkHbwn5W08JGap/CRjLMvYu+/vcKlw6t4w53gtrsKSUJH8JK+vSQ/PPCRsrTwkKyr8LCgm/CWv6EmUDNgPPCQhK7wn5W0OvCYtIHIutGoPXDwn5W0KvCqrrV7JCTwn6CiyLrIuvCRj4UKL0Itw4cu6q+Y8JGcnXplwrbwnLW8dnlGYOCxvyTCpSpl4KmL8JGZlCPgq6rwkJWhCi5CLPCfiYZheyjwn6uje10iJeK2oOqcoip6L+C6gj8nP3vwnoSF8J+VtCrwnLK8CgVCA+CxiwoHQgXwkZqgMwohQh8k8JCokks8TXlsdiRR4KyD8J+JofCdlbBs8J6llUc6CgdCBfCRpZA8Ci1CK9GoVXtcPSIk0ajqraUselxP4aqH77+9POqkvmfIumDgt49o8J+ulDPhv7IKFEISJWTwnqCXJfCdhZnwn5W0OiVcCkJCQCrwn6mA8JGvkfCdlKVc6qKAcCTwkJ618JC9luCzquKEq+GJmPCflbTgrrUnKvCRlrDgqLwkKj3wkYy14aCPancKM0IxJdaPJVzRqPCegJ9gKuOEhznIujjenGNH8J65mfCehY7vrLpMN/CRj4o88J+qgOquuAoXQhXCruG9neKRiHHwnqWf77+9IiLgsIwKGkIYJvCQoIg/4L+aL0svTlbhnLBMLsOQw5BjCk1CS9ez8J66uPCflbTwnZKmYPCdvKpccOK2luCyjyrRqPCdkp7Ok+qukVV777+977moMPCfq5JqPuC0h8Oc4q6C8J6ji/Ceuacm8JC6rAolQiPzoIWt77mo4LqBKtGow6XXsi89d++/vSF78J+ppjZc4aagPgo5QjfwkJaVLO+/vfCfoLLqo5jvqYjwnY2j8Jy+lfCQubXwn66BJvCeuZFz8Jiwujwm8J6AoPCWtYxgChdCFTI6YT3RqPCfgrbwn6m38J6knuC7hgoXQhXwn5W0L++/vS/wnYuy8J+VtPCSkKMKNEIyyLrgqoHDiOCvgCUiLz3gqrXgto7wka+34KyBJTpW4LGL8JCrriXgrrVL6pSZ8J6kjSQKBkIEPe+5qgoSQhAuTCIqLmDwn6OBPfCRprEuCiBCHsKl8JCWuzpuRSc88JCekCTwnrqWZC516qaN8JGnoQoPQg1Seu+/hkw68JuxgiZ7CgRCAi9FCh9CHfCQuqs6YeC7gPCRl5fwn6ezw47DqMKzJnLwkKubChlCF+KHhPCegKPhpaLwkbWW8J2SpmDwkKyNChNCESo10ahNJC9yXu+/vVwqVHRgCiBCHinigZA8YCXwkY2N4Kme8JGos/CQtIYn8JCAnyUkQgoHQgUu4ay0bgoeQhzhoLQ68J6Aqsi6KWlPwqUuLWAl8JCuqfCdlIhsChxCGvCQlbXhv7RcX/CQpKt77Z+we/CWv7E976uHCjBCLu+2nWvwnri58J66iMi64LaDIjLvv73goLnwn5W0cO+/vVFGYT3wkbCP77+9JD0KAkIACgpCCDcvajvRqF1yCkRCQnZkP/CRjq0n4Keg4LuUNj/wn4KrUCUmKvCQoLfwkJedNioq4bybTci68JGMlfCflbTwkKOr4rWvPCEi8JuygeCtlwoxQi/qp5N86qefSGDwkYqI8JCQr86G4L2n8J2MiVYg77+98JCWlV3wkKCFM+CpkS5cXAoaQhgkdPCRiI/hiYzwkICfKOGJuyfwn4mFPEQKK0IpQ04/fcKlKPCRpIkkXMOKOzlze/CbiJV8SCTwnrmLL/CRh5bCpfCRj4IKOUI38J2SrPCdk6wmw7kvwqVl4KmB8JCWpiXwnbyKJiYi4bKV4KmR8J2qnEY/WDo1PMKpJd6FacKlfAoKQgg/yLrwkbyLewohQh8+JksnJXXwn5W0J9+NXOGmp+K+iMi6OvCRv4YkX2BRCigKBG5hbWUSIEIeOvCehY4/KjU7dcO2wrjgtr08KvCav7DDu1vwn5W0CkUKCW5hbWVzcGFjZRI4QjYvPyfgtakuPeC0hy7hqb9efOGkoMi68JCjrS978JCuhsKlYO+/vfCeupLwnZS077+98JCoq3YKww26Ab8NCusMCgdjb2x1bW5zEt8MsgHbDApBQj/wn4mQ4YOHw6xcPfCdhqLjsZzwkIOK8JuFpvCRtpDgu5Iud96Zw4DRqFd7yLrwkbusJ8Kl6qW4JeCnjMKzRnsKK0Ip6qyjPD3wlquwUvCdkqnitK3vv5zwkIOezozhvaXwkK2S8J+VtClGJWUKEkIQPu+/ve+uill7MCAn4KqrJAoLQgnDpyUlS/CQqYgKDkIMWiRD8JGIr++5s1x9ChhCFvCfq6J7ccKldfCQp6cuJT8k0agnN2UKGUIXJyXIuiU6OPCflbQn4YCUJXzgrLDOjCUKHEIa8J6fofCRjY3hkK7CpfCQop7IulzIujo9zogKDEIKw4AqKvCfm7A9KQoQQg48J/CQvJDjgoZG8J+fsAo+QjwvJOG9mSTwkJaV4LeQ8JCPji88JfCWv7Fgw4E8W/CdiYTwkYy/8JGMvfCflbTwn4K6PVLguZDwnou/w5QKCEIGyLp76q+yCgdCBeCuvkYmCgdCBcOdQSI4Cj9CPfCQlpXCt+CtjEUke2AkOirwkLqx8JGPgikk4KmBdXvwkIOmcFw9YVbCpVvwkbyW8JGHrnbCpeK2pPCflbQKBUIDyLpSCjZCNMOSS3bwkZyZ8JGMqlfwkY6LJSUlUifwkJWbJfCukJ55Kio6el/vv47wkbKc2JLwkYqQJSYKM0IxPSTwlrmxUOqXqHdT4LOzwqXwkJKlJ2xL8JGNqOCsm0178JGsicKl4LGHJ/CQgI0uOgpBQj86P/CRjoHwnZK5LvCeiqHwnrKOJvCQrKRqYPCQnppgQibIulPgq5A28JGbifCQtJvwn5W0JSLwnrmPJvCfiZAKBUIDJGNmCiJCINGoTcOy1pxC4ZulL+Chu3s6YG17YCLgroLigo49MipKCiFCH9ev8JGxlyMo4Kq1JMOc4LGaWT3wnrqj8JG1hS00ZT0KNUIzMkYpOvCdlY8ve3vwn4mAJn7wn4K+ZTrgppVE4K2HZsi6X+GKvPCRtpDhvKovJeGKssK0CjVCMyLwkYqMIiTDrVTCpSoqIuCtrjzwmLGyVi7qnZt5WsOQV/Cfnrhp8JG8s+CqgmDgqKrIugoCQgAKGUIX4K+I8J66on7wkpS9IGBSWWnwkJaxwqUKGEIWQDUwYEI8XUHwkbCi8J2TtGA9QsK2JgokQiIwyLpu77+977+9bMOT4aSTYMKsw7NKyLo/PSYn0ajwnZGNCjlCN2B78JCrl/CfhorwkaCVTijwlq2+8J6ig0N8XCZp8JG0v3tjYybvrLtZPPCQoIPguqXRqG7qrI0KGUIXOuCvtdGo8J65meCopcOq8JG2hyRiwroKIEIebuC1hypETeCssi9SyLrwsZSP8JCUpdWEbnjwlr+xChJCEF/wkYiPw5Lwn5W0ZOG9nXYKH0Id8JCWm8i68JCHoS7wn6qt8J+VtMK2fjxDIuCzs3gKLUIr4Kma8Ja8h/CfnIU6PPCdlY494Ly/6qeR6qyg77+TcOCxi/Cfqq8n6p+QaQo1QjPgu57wkJSmczo9ZsKo4KCUYlEnOvCdkp4nOj09evCfoaPvrYQm4Les8JC0lybironvv70KHUIbLvCeubsnaGDIuuCpjeCtgdGoe3luXFxEKiRcCh9CHTo6w71GPC7wm4WmefCQu757P2Dgt5jIuvCRi6E/CjdCNeGclGA8PPCbio3wnoCnZOCvjeCzqzopPOGLjPCegKbIuuCpmz1Be18jSlxaJeC7i/Ceo4hKCj5CPDw9wqXwkYGSJj/wnriwSOGqoC/auDzwnrmb0ajwkaSo6qune++/vUbwkY6F8J6lnu+/vS/wkL6DPdGoYwo5Qjci8J6Apy/wkYSnw7XwnYyGRiIpL96pJS7Dm1bgs4vhoIPhnaLwnrinWSZJ4YmMOPCRvJPwkbCaChpCGOGrhl3wnrmOJSQ977+98JuykNGo4K6PYApCQkBW8J+foXPwm7G8JNGo8JCojOGktcOc8J+eqnTDlOqfkPCdk4Lit4psMyPhv7TwnrmS0ah7Tuqfmj/vv700wqV7Cg5CDOqkiHBnOt+38K6zgwosQior4Kiz8J64tOGngX7wkbyvYOC6gvCQqIXgqpvwn5W0PU1c8Juyl/CeupEKMUIvwqXwnLSi4LaMKnbwn5yQ4K6c4LOeYzzwkJWRwqAvcjzwnrmP77+9X0IlNuCzlnIKPgoEbmFtZRI2QjQk8JC+hTI98J6AqDA6Y/Cav77elCVk6qyLYvCdlLNgwqUieD98P++3sFBw8JCwoPCflbQqCg8KCW5hbWVzcGFjZRICCAQKoA26AZwNCt0MCgdjb2x1bW5zEtEMsgHNDAoyQjDwkIeo6qykJ/CfgY91ROCumvCflbTjgZrgsZ17aT1u8J2UlzrslqXwn5W0WS5CY20KH0Id8J+ghE1SYE4k4LucXE5VKvCflbTwkJKkTOqinF0KBEICekkKB0IFUeCnjHQKCkIIJeOIjvCflbQKBkIEMu+zlwoSQhA7JeC9jOqgsNGoUS8n77+9CgRCAnFkCjZCNOGdsyQ38J2LqsOM8J+VtPCRm5RKeMKlZGgj8JGaqPCeubU68J64ueC7huGdiz/gtLs/yLoKBkIE8J64pAorQil44ryVOdil8J64u+C7k1zgqIbhvo7wn5W0LvCen7t7JCLwn5W08JGNjApDQkFe8JGkifCWqZ7wkbWn4LuRYvCQoLfhjovvv71SPDzCpeCsg1xL0agoXPCQlpvDovCQoanihbrwkLm7J2on8JCehAoUQhLwn5W0JcOX8J65nWjwn5W0VDUKMkIw8JORgz5gIiLvu4nCpTpZNjE677+94LGDPfCQurFI0ajCsycqLvCRjbBc4K2IYMOTCi1CKz03V/CfqbLvv70jKeCxiu+3j1zgsYbwnrii4YKB8JCMgtGoJ+Cov+K0uzcKIkIg8JCghOCsrci68J+VtDzwnamH4Z6JOvCdlY3vv73gsIwKIUIfMvCdlIl7JkzhqaHwkYy1SPCRtYJD4LGD8JasqmpVagoxQi9FdCrIuuCqhijhn6TCtSYlfuCsizo38Juxs8Kl4rSCYPCRj4LCqeK1mSZM0ajCpQocQhrhiZrDsPCRj5fwkKmI8JCVviXvv73gprLCpQoCQgAKJEIi77+9JkfhnqQ+8JCohiQm4KKDJeGuuiU64KeI4rq28JC6sQoxQi/wkY+F8JCpmPCRj6JobvCRtaNf4rqv0ajwn5W0OvCQi4MvJnThqYd78J+VtCXCpQo/Qj1Fe1nwro6+NC7gqILwnri577+9Rj8lJVzgoIzwlrqWLvCQnrnita8kej3gr4ZgXyvwnYWu8Juyh0Dwn5W0CkNCQTNX8JCWs8i64KatYOqkluCrv++tgTx+JvCflbTwnrmXJSY/aCIuPC7wkaek77+9JfCQkqglIiHwn5W04KmI4b2ZCgJCAAomQiRJ4LG54Yq+XfCRpIQkTmLwn4mgP+CmsjvgppAh8J6FgH5RwqUKGEIWSF8kbvCQoIg/8JGHpiTwnLy+wqVWYAoyQjDgq43wkKuxP3rwkK6tbXxy8J+VtEBcTiLwmr+9P3cn8J+VtOCrjWAq4b2XyLp3Ij8KM0IxJs6FJyLRqPCQjYI6L2Dwmr+9L/CdlYYh8J64q/CRjYDwkbaQ8JCNgsKrMPCflbTRqAo4QjY8b9GoJHLgoaXwm4Wl4oKDXOCnhFnwlJmE4KmMLyRgXDx78J6Lv++/vS0/Kk7YnXEzV+G/mlwKK0IpIvCRjIJ18JGwm+G/s9Go0ahRyLrita9tb+GPui/wm4WmQzM/XCXiqZUKJUIjVCYlKvCflbTwn4K0TCVx0ajgvqYmJfCQhqDCp1/grYs/0bcKIEIe8JGwhPCen6rigJg/8JGchW/wnoCoe/CQlrvhvZl8CjBCLmBg8JGkleC7gfCeupIiZEXwn6q88J6fqTrwkYyQ8JG0rVksdOCyjMKlbj3gqoMKKEIm4ZyTOiQ6z4An8JCpkTp3MtGoXmTvpLLRqOGcqsi6P/CRi4wmLiUKHEIa4aeHO+CmhuqhlcOy0ag/JSbwnoCCPMKl0agKPkI877SYJ/CQq7LwnZSI8JCpgvCen7jhg7hgw5jIulwzc19k6qyhJOCmruKAkOK3ie+/vVfwnrq1R+C2vVgkCiBCHirCpSThi4IzJEcnPFs6L3tzOvCdlJjgqoLir4wnYQojQiElPDrgsaIlYCJIcfCQv4Pvv700MT3RqCQt4Ked762XJT0KHkIc1LrgqK17bSrwn5W0J/CfiYTwkbyJY++/vU9EQwoXQhVKw4hwPCo5YCRVM0tgIMOw4aWdKmkKJ0IlOvCWrKHwnZKY8JCAgzzgsrXhj6wvO8Kl8JarrCZCYOC1iC0lOQoVQhPwkaSQ4K2mMXA9TiZDWsKg0ahCCjpCOMKlUWMvJkHIulUi8J65n+Gfoy8kOu+3vz/RqO+5qS9c8JCbkzkwP/CQnqXgqI8q6pukw4Zi0ahyCikKBG5hbWUSIUIf8Ja9v0LwkIyyXOqfkz8ndmvCpTZg8J+VtPCdhI1cPwoPCgluYW1lc3BhY2USAggECqsMugGnDAq3CwoHY29sdW1ucxKrC7IBpwsKKEImJiI/4Z2sw5DhoIQ+77+98Jyyi1VcJeCzhzw8bjp7LjzgvZEnTD8KK0IpKn3wkY+INTrIujrwn5W08J+VtD3wnpOw8Ky9tyciIiIjV2tc8JGnkCoKC0IJXCDwkKmD77+9ChFCD1zwkZKgzb0q4LOW8JG2mAoNQgtEwqVF76yT8JCdhgo7QjnwnZSZOsKh4KmIJzzhjJM5PXXwkIGcL1zhs7pKUSzIumfwkKao4Kum76ynXHbRqPCRjo498JCNqzoKDEIK0ag6XiV76qmGUQoQQg7wloSHRlnwnrqO8JuAqwoNQgvCpfCSiqI78JG8pApNQkvqnafwka+P8JColfCeuZ/wnZGl4K6j8Ja/sT3bq+GktNGoXO+/m/CflbR7LyLwlqmmIvCehJQn8J6Lmci6eyXwn5W0Tio68J2Su0YKFkIUSFxc4YOHVMKlPEFc8JG1hvCdiIoKEEIONi7itrHCuCbwnZKmTkMKMUIv4oSvwqU+PtGo8Jq/tlRcPCUoK/CQoIPwkZmUJPCQnrVpTCcnIirwn5W08JCFiT8KN0I1XHDCrn7gt5Thv5HwnriDffCei79WTyQkQic98J+JokB84b2LVCXwn4Caek5JPD178JapqToKL0ItRi9gwr09aSZgTCTgqIhbzoom8J+rm+K3lncqPfCRi7LhoZ8vLPCfhpE/6pKfCj9CPSJW77+9efCen63jhKw3PVbCvfCQto/hnLB74LqE4K6c8J6fqFxGUuCrrfCeuZnCsSTwkLCa8J+VtPCRspkKCkIIPyTgtYg8Kl0KLkIs6qmT8J+sgOCokD/gsIss8J65juCovntLyLrhsLXIuvCegIA98J2MvvCeuKwKRkJE8J6fpi4/0ajwnric77+98JC7gsKlJfCRsYDhnrAk8JaEsjzwnZOdS+y1sci6KvCWqanwnrmJ8J65lOC2vXs0L/CRgrQKFkIU77+80ag08Ja9m+GJmPCRlpDho7MKIkIg4Ka/Jibvv73wnrmPR3t4aD3CpV/hpYzwkY6OOvCflbQKDUILe2QsPPCQk7dcJGAKJEIiKidRNN+T4Ymb8J64mMi6XEY8dmDqq5/wn6KdLvCQralcPAokQiIgIvCRr7nwkJaUwqU5S+Chv2k8JybwkLCqP3siVyXIusKlChFCD++/ve+so+G9uvCRsYUrRAofQh3wkL+J7KSpOi5DcSHwkZuDQeGKueGKvPCwhKsqdwo1QjMn8Ja5lC5Z4LGW4oKn8J+VtOG9rCc48J+VtPCflbTwn5W08J65vnQp8J+VtOqfnPCRsJQKLEIqXCZJ8J+VtOC/keCmufCcvLBfIPCSkKIq0ajwkI+PPfCRpIMqyLpQQHRcCjFCL/CdgobgqL7wkJakXC/wnou/J+GfqOGggOGkiPCQoITCpfCdlYNa8Jato2NTw4pECjJCMCvgsYfwn5W08JGvs+Crg1zwnrG8QHsuJVkuYMKlNfCRhIgnKy7gqJN26qifLOCriAoNQgsnUFrgr4bvv71PPwoVQhNx4oOo6qmYJXdj26DqoLbhnbAlCkRCQi498JCimCIp8JGxpPCRj4LwkLqw4KqM77moVz3wn5+pYPCflbTwn5W0RCrwn5am4LGWXD/wmr+64Kma44eL8J65mwoDQgE6CiJCICZue/CeippSyLrwn5W08JuFlSrwkY6q4LCI6qeR77+9ChNCETQmJeGotTrqn5NHKlPwkauuCh5CHDYu8JG0pUHwn4SybXVg8J2LkWt9JuGpo2vCpTwKHkIc8J2qnHMuYEPwnoSxaSQwcz3wnoqi8JGrhcOqIgobQhlEPSJV8JGKlNGo8JGGtkpTRPCdkqrwkJavCjpCOPCflbRgYMO/8JCKvyBH4amO34LCtUVKJ9Go4KaF8J+VtPCQgJDwkJmhYCfCpWAnJjlg8JGkvmA9Ch8KBG5hbWUSF0IVKidm4L+TPFfIuvCdmZZ3WO2fhVlqCkoKCW5hbWVzcGFjZRI9Qjsl8JarpSU9POK1keK0lcOH77+9J2A9762EP++3j/CkkazDnW3itqnwnrqB8J+VtPCflbTgs5bqn5vRqAr8FroB+BYKnhYKB2NvbHVtbnMSkhayAY4WCjxCOvCRtJ/gsZVP4b+WJcKlU/CflbQqJVtgR9GoUu+/veODmuCxvj3wkauA4Y21JdGo8JGPlPCflbTvqrkKR0JFwr8pyLrgsYcv0ajwn66OPfCQlpQ1ZOGsuzoo8JuFkeGqquGJmiQ/8J65i/CeuJDgq4Lvv73wnrmJ8J+upHElbS5P6q+2Cg5CDFxc6qyC4LimXOqltgpBQj93OuGkpfCQq4A+wqUiw4ZwLvCQgZQ/8J2QsDrwkJax4K2NJfCRjYjwn6Wsfj9g8JGyoVXhnpUqfNGow60kLkEKSEJG4LOdKvCdkqIy8JCTm/CSkIPRqPCeuYLDgT9ELyfgt7Nxa/CQlbzhoo8l4bGC8JG1lPCQhJfwnpeR0ajwn5+w8J+VtOC/gwosQio/cOCrh/CRg6YmUmJxJuClimJc8J2MhS3qqZDCpXsnJvCRpJbDl/CbhZUKOEI2Lz/wkbaOSuKBsS7Cp/CRgatcfXVhSG3it53CpcOk8J+VtPCRgaQ7IuK1r+K3jmDhoIc/Llh3CidCJWDwnoCjJMOjJci6Kkkt8JCTn/CdkqnOsvCfm7In44ODLknsh64KCkIIRTrvv73RqDMKMUIv4LK44L+TL++/vTzwkbG5Lz944LuIQ8KlfEI8SPCfq7Une/CeuZ86P9uaOCXCpToKO0I5KfCfq7LgtZXwnZKmfm8777+98JGKlyYkSci68JGLkOGBmz0p8JywscOqIlc/e18q0ajvv73wkJ6DCiBCHiTDimo6L31xM+CrieC3tD/wn5W0IjDwkYWh4aqwOgo3QjUsPcKlP0Qm8LCRuOGAq2Al8JCtvfCQnoE84b2b6qOV8Ja9j1rwkKCIdfCRpqLwn5W00ajRqAorQinwkZaBM/CdmLp7On3vv71I8J64p0nbnyVa8J2Ii8Ox762OPvCdkoPRqAomQiRgPPCflbQ98J6EiEfwkJ6r8JCeqvCQqJfwkamU8JGCkeGKvToKH0IdQDzgt5IiLypR4LWdNi4tYOK2oSrhpoE4L/CflbQKKUInSvCfrrZ54YON8JCtj1w+Ii7wkI2Vanvvv7xAMCrvv70mPSXgqYdACgxCCvCdiK8q4KG2M0sKK0IpP2VzLlXhsr9u4oGBe/CRjIDtnrw28JCkiOqsgyY24rSa8JGFlvCRj5gKF0IV8J2Ggci6YuChouqer3Jz8JGlgjZJCgRCAi52ChBCDmw2YHgn8JGCviouw4tKCgJCAAojQiHwkLmu8JCzo3suw67is4sqRy7vv73wnri08J64uy/hsaUKPUI7RuC0oOCmsigu8J+DgzzgoarhoIfgsI7gtYzDmmDRqChcWWB+eyfwqruC8JCBkOGgkifRqCfRqFXgp5cKKUIn4YONVjTOnS5Q0ajCpcOr77+9IvCen71r4LWwZsOUPeKCpfCdi68qChZCFPCfm7Hwn6mn8K+kgOGJi33wnrq3CjpCOMi6a9Go8J+VtOCtnfCQhIEsYOGKslx0PyonKvCWrojwn4KuOyrwn5W0P+GJnMKlwqVfcGDwsYmECghCBvCRqoVcWAocQhrwnrms4b6qe1UuPz88OnnwnL2TTPCflbQlIgo2QjQ64Kqk8J+VtC4777+98J65ku+5hfCRtIHgvajhvZsl0agmUXkvOy8hYCXOhyMuNfCflbQkCjNCMTLhpYDRqDrwlq2c8J+fluC3svCeuKnXsfCRjK99O/CeuZ9qJSfRqGlMJ8OBJPCQnp8KPUI78JiLt3Pwn5W08J65lPCRhZEl4aSaIn7IuvCeuqPwn6qIP/CbspHqrKTwkKiR4YyUNPCWpZzDrPCehY8KC0IJXEDgrqrwkKKbCjpCONC98Kq8sPCdpr7hnafwkLOBIu+/veC3lvCRnLPwkbaQJO+/vfCdn5vigZbIuiTwm4Wk8J2VhFB2ChNCETrwn5+wJMK40ag6eynwn5W0CglCBz1c8JGKgkgKOEI2TeK3gDx4Kj3wkIGF4KyQXPCdlYbgp4cuaPCesoRAJi7wnqWf8JaEg/CRhoQk6qCS4KqrQDwkChBCDvCRpINISuKClPCQso5gCitCKVDCpeCvkOGghS9y6p+Velx3OvCeuZ1dIlw2P/CQvbTwr6WgPtew6qG1CilCJz8qwr19J1w/8J64lWAiKmDwkZCL77+9LvCei5vDo/CQurAr8J+VtAoMQgrYvTXRqEjwlquGCkhCRuGKku+/vSJ+VfCeubnitK0/8J28py7RqCrwkbS64Y2t8JSWnzrjg7zwk4al8JCmvfCav7gkJ+C2kknwkICDPCJVJ0kn0agKLkIsdXglJSfijqZVwqYi8J+VtEMk8J65m+GorPCRtLwn4KuI8J65h/CehY4/yLoKGUIX8JG1lk9YaPCroI3wn6K5wqXCpfCQloAKBEICLiIKMkIwS+Cus++/vSXgqIM4LDrgtoLIuuqUhEkv4LKG4La51YF8VvCQl6jhqpnDnDrwkKCACgdCBTzwqp2nCgJCAAo7QjlLYfCfrpHhn7RDKlbwk4Ok77+977+98J2EtnvgrYInL0Hwn5W08J2Sq0rgs4fgqLLCrnkk8JC1j28KTkJM8J+Jhci64rWw8J6Fgj3wn6CgX+GmlHgifPCflbTwn4mk0ah58JGrluKwumDwkbam8J6ln+C3luGgk1Ne4b+2YPCflbQm77+976qNYAo6QjjhqqZqR0si8J+rnMK0NPCQjpjvrojRqPCdi6MtYCbgoaHhoIhwYPCfo4DvupThmqnCpSXwkY66PAoZQhfwk4+KbiXhp5Y28J+ljScl4KaDdz0kewobQhnqp4A9L05xJFwlwqXgvanDlWDgq7skXEx3CgdCBdGozo4zCgdCBSZy77+9ChRCEuKApjXwnZSJXci68J2crypdJAoSQhDhvKh74YyU77+LbfCeo40vCiBCHvCRtpHIujzwnYuwRnTwnrqLLj8lL2AlYfCflbRnJwomQiTcty578J2UvOCtgmHwn4CG8K62reGyvUBnYC4kcy3wkLSxJz8KKEImIuK0pCRcRfCRjrnwnYyhfeC9t/CeuKdXPCPgtYgqcvCegKjCpUoKG0IZ8JGyre+/vSQnw4fhpYBB8JCAkCluVV5hPQo0QjJhJSfgrJXwkJOiXPCflbQt4b+6ICXwlr6GOeGKvEx4KvCQiq/Diy7wn52sw6bgsYB7JgoHQgXwkIqWRwoKQgjgrLJgbSc/YwoaQhh38J6XlFVT4YSh8J+VtDrwkr+cXOCrgCcKPUI7e2N26qOoIvCWroI+4YOHNfCuuLfwkaWBKHYvZ/CfhaIu4LOIdfCdkr7wkLqwyLo0WuC6gizvt49BJ0gKQkJA77+9Vci677+94LCKWz08PDzigJLwkaCI762DLs6bVvCWqaki77+98J6AnOCspeK+kn7wn5W0XPCRjKDgrpTCsAoKQgjwn5W04LOpOgoqQijgqrZUPS5m8JC0mjrgqZrqqYDqqZfwm4SyKmjwnriiPSVc4KGeJCoqCiBCHnRgPytg4K6fJOC3n8i6Z+CvguK0rSLgs4Y+8Jq/sgouQiw9fsKu8JGMo+Czi+K2tci68JORlTzit54zQsOM4KGWJ++5qD1VZyrIum98PQoIQgY/PfCbhZUKG0IZWFXwnoGVfjN5wqVqVuC6lcOf8JC5vMKjaAoHQgU/IjsjPQonQiUk3YF74Kib8J2UlCU+OeCovGMwJsi6P2QiPVMjIsi66qyLYMK+CiZCJOGJmDhD77+9JPCQlbZYJUJOazritK0lIUsn4oCDQHTRqD8pJQpECgRuYW1lEjxCOsOmYO+/vT3wkL+g8JGNsTxg8J+VtPCdkp914KmcP2Dwn5W0SfCbsoVe8J+imWDhn7LwnriW6qyNJlEKDwoJbmFtZXNwYWNlEgIIBArOFroByhYKlRYKB2NvbHVtbnMSiRayAYUWCixCKvCfqoh18K63jCon77+98JG0vF/wnqWeZeqbr2AlKnrCpcOk6qOZJzwuPAoIQgYi8JGonSoKJkIk4aCK8JGwo/CRsbcqZyUq77+98JGKiPCRjbJ4PWtHT0Twn5W0Ch1CG/CflbTwnZK+4oGFXMi6JeGKteC6gmpW4K+MRgoYQhYv4Kiq8J64tOC0kC7NuiZA8J2VhiouCjVCM2rhqrsqe+GJmFxiR3wvJT888Jy5sWJf4Lue8JCzhu+/vU0kJOC3ssOs0ag88JCWmjo/fQoTQhHwn4CecfCWqp4uPCd9P+CuhwocQhrgv5YkXlzwkLObzbrDmyPCpSXwnrmU8JCplwo8QjpgXnhcP2Lvv71gKfCRvK/wkLqtP1ov8J+DmOCmvWDgr4DwkJ614reU8J66k+GMkiXIujUkeyfwkYy4CjRCMuCzncKjwqU9TC/vv701bFzwka+2fvCQqLPvv73igpBcUvCxrLQkTfCdkqZtOuGdo1RcCgZCBPCdlYEKAkIACkNCQcKlPTk94Z+w8JC+hOCziz178JCGmC06XkYq8J+Bg+Gyg8KlffCfoKrit4E94KqQ4aOeJCkiQyTwkY2n8JCguMi6CixCKkHgqZEmKvCdkp/wn4e/ez8n8JCAhPCflbTvrLh7Oihdw4nwkY+J0ah5IgoCQgAKBEICKn0KNkI0XPCRj6LCpeGln2FcKvCRtagpXF9IN3taJPCbspnhiYDwk4+R8JCohmDwnbyDIzpJJEvCpQoPQg3gu5nIuvCRsKXwkYyQCi5CLO+/vS7wkY2Hw7ZKQ1zgvrZYJWvvv73gr4HwkaShPT3grYvDjtGo8J2QkVwnChtCGfCdlYZJLztnL+GOlyUy8J65lz1YJ/Cen64KFEIS8J65tVzvv73wkIWIJfCQvJJ3Ci1CK3I8ePCflbRJ77+9XCLwnp+u77+9e3l58JCTmmDDtXZgOvCRjZAqKDzvqp4KHUIbeuCpkTokP/CQvrLvv7066qWk4oGxND3graEiCkJCQOGNrCs8XHs64KegPPCSlIzwkIaQ8Japon3wkY+Y8JORgi5k8J+vtl1FSSLwnoWPR/CQhpgkL/CQuqvgvrTRqEgKEUIPO+G+v1E98JCmlEXwkLyCCg5CDOC2vV0idCXIunR7JgpEQkLwkZOR4KuQ8J+MguCwlicneMi64KCV77+9JUHwnrq58JCHoCLwkaeeUeC7nvCav7fhjIzwkb+t8JGqlzp+e/CRpIkKDUIL77+9yLpYJ/CRjaAKLkIs8JCilvCepZXgr4fCpcKl8Ja1tD3wkJaMOlF7ZfCRvIhU4YGvXOKOsfCflbQKBkIE8JC9iwo6QjjwkaOYWz3wkLWqL1A68Ja5j8K78J6fuOK2tOCgnfCfn6En4KyzPSrtgZnwnruw4YCq4b2d8J2FhgokQiLwkLWUP+C8rfCWuoPwn6Gw8J64pyvovKo9KvCRpZg94bC+CkJCQPCflbTwkLKcSuC1sGHwkIWL4Z+18J6Fj9aa4K6H4K6ZPmDqraLDtXhsRScm8K2zgSduYCTjgbVSOihII/CWrKwKH0IdPfCctJ5gUeCvkPCflbR88J+rt3tU4KuQwrzgsJAKBkIE8JG7owokQiJKXHzDnHwu1Zlz8JCDhjrgr5BXJfCRqIJg8J+VtEJ6TUE9Ci9CLT3OhVvIumLvv73vv717TjzwkLqr4LqEe+Cri/CRvIZ68J65mfCQoI7CoDxgLgodQhtuSnJvLu+/vS3hvZthVibwn5W0JfCQtKBqPScKG0IZY0FM4LKgImbgprLgsLd7JOC8tSzwkY2XRQo2QjTqrJbRqDrwl5mu8J64ufCQmIDvuZ/wn5W0MFxjJmjwkLGEwqUqWPCRsrIg4KqBe/CQk5slChJCEOCuo3tgwqXwn5W08JGbgjoKEEIOIvCdvKrwkKC88JasijYKI0Ih8KufrcOp4bKdUyfqo7fwn5W0LGkqwqVOyLrgvorwkbS6CiZCJOi3iyzWj/Cdm78nRcOLJfCfqaRc8J65vuCnjsOjeybwkJKhTgouQix+JEtt4rah8J2EmC/wm7Gz8J+el+K5neCqhzzwkaag8JGHpeG9nUZg8J+VtAoSQhDqpa9i8J+VtCInw6Xwmr+3CglCB+KAiF3Dr3gKIEIe4LSP77+977+9J0rIuiXwkpSxwr49IlRE4oCR76yTCgZCBGDRqDQKCUIHe/Ccv4BRYAo9Qjvgq4hRPCTgprLvv71iIuGwu+CxrGpjyLrwn4S/8J+ApDzgqI/wnrm+8J64ofCeuYdcJvCflbRcXMi6Lgo0QjJrYcKlU/Ceu7HguqjwrrKfLuGLjj/gtr3wnoCkJVzgs4ZWOifwq4ai4bOy8Jatm+CskAocQhoiPUB5JVrwkY+C8J+VtMi64aWk4YOH8JuFkgocQhrhoJbhs4Ip4KGe4byt4LOCOtGoJPCRtZPCpQoPQg3igo3dvyfRqCDwkYuwCg5CDPCQvJjwn5W0ceG+hApFQkPgu5XwkaOfQ+qfltGoMiXwkYyG8J+VtPCeuYvwkZicPfCQhpFT8JCggkXRqHXhqonCpS7gqYs88JGLkTLhqoElaCQnCg5CDCpg4LeGKuGmsjw6VgotQism8JCirjzCpfCfqqHgt5Dgtr3itrrgtr3vrLvNv/CflbTwkKijc8Kl6qO6CkNCQXYuL/CYjI9dYfCel7/wkJav8JGKhSrig6vwkZixw7A8OzFzwqnwkYehJ3vwnZSIZSjit5HwkY65e+KBkPCQvbdiCjdCNeCpkT3wnrmRLuK3juyckEle8J65vuG9tfCRjLNR8JChqyo3Oci64LqGJPCQroHgr7Hwn4SzChlCF1F7P2AkJ2glJzrwn4mjYMKwTC/hoIgiChdCFScw0agqP0rwkaS0WPCQoIgw8J6frQo0QjLhvpvgtofwn5u04LOyZPCRk5FgOu+/ve+/vX4lYDXzoIejZSdu8KufvfCxnr/gtI80QwoZQhdw8JGKhnMm8Kufu3vwkZqyw5Hwn6GTUwoXQhXXsPCSi7bgpoVEJGDwnrqG4Ki/UV8KLkIsJybCpfCflbRV4La3PXvRqHjwn6m1JeGAnjwn4LCQ8JG0iDrgqYhW8JGNtC4KL0ItYDrwkJ6Jd0VbwrvgvbvwlqePXfCdlYHvv73DoyokTS7wkY2XQeKKoOGLhTxrCjRCMuqsjCXhiZzwkKiXS+qqh/CRjZdgMOCxmtGoXMKlJyLwkbWSLvCQnoJc77+94K6+eXtICkRCQiJbL/CRtaPgqLDqp5A/zb8kPSIuPT3Iuj9kPPCRpJXigIPwnZKe77+l8JCkv++8kT/wnZOC4aqBdvCbiat3RuCntgovQi3gp6DwkL+CRvCen7DgsZY86qyiPybigIXwkbWiJntFPuCqjzLhipfwn6KjOiAKN0I14K+QcCLwkK24P+CunFHigb7CpTww8J2BgHEk4LuGe9W5LizgsawkRPCcvJUoJycle+GfoHsKI0IhdU3wkKiVOlXwkKqRXC/gr6wu8J6FjiY9LC9uIuqfsidTCipCKE7wn6G08J+VtCrWjfCRjIfwn5W08J6FhiLwq4iT8JGxul4u8JCziVUKFEISM+C7lT12L+GuilEiOjXwkKuJCh9CHTzwnrmkQizCpSHgpJUuOjrwkbWnR1PwkKiO4aqUCkFCP++/vSfwlqmKJ8K+LvCRtpg8fkc6NsOP4LOo77+aTvCWuYrCoeCpiC4k4La7MvCeuKTvv73wnqWZw74hPOCqgwofCgRuYW1lEhdCFcKl8J6ApCTIunrwkYKx8J+VtCZjMAoPCgluYW1lc3BhY2USAggECoIDugH+AgqgAgoHY29sdW1ucxKUArIBkAIKLkIs4Z+wJOOEjuOFgvCQoI7wmr+xJ/CQvoHwnZy48JuFpsi64LKU8J+rglzhqpIKHkIc8J2Gm/CRvJDig7An4r++w7oqw7Dhqqnwlr2+PwosQiok4K2X77+FJ/CRu6Mt8J+qh/CfhIjCpX0qOvCeuZQl8J+foPCqobdgLksKGkIYYMi6YPCen65R77a/8JColci68JCwpSQnChxCGuC0j+C3n++/vfCRjLUm8JuFkfCQo7Twn5W0CihCJvCdgIXitb8me+KBsXt38JGDtcKl8J65ryYv0agmw67wn5W07Z+VCixCKvCRioMiezpww5I9OuCskH09Y+C2o0E/U/CQhIFd4am74Y6I8J+VtHnRqApICgRuYW1lEkBCPvCeupbwkbS8Llw6P/CwuKpm4rayP3Ay4KWg4K6eIHvwn4OXXMKl8J+VtCdpLvCbhZA68J28i1h70agm4raoCg8KCW5hbWVzcGFjZRICCAQKpxK6AaMSCskRCgdjb2x1bW5zEr0RsgG5EQoEQgI6OgoNQgvwkaSV8J+VtOChkAosQirCo23gs7JIIu+5mGDgrpLwnY2BQPCflbQ/4KanRzciw6DqqYR5ePCQlrsKDUILOmAk8J2UlPCfq6QKJ0Il4ZyiOmnwnriD8JGnnOCviiLwkZGf8JGNsS7gqLZ7RPCRkKPDkQoFQgPgtoEKGUIX8Jatly1M4ZyKWC9cIid677+98JatlnAKDEIKOVs6w6/wkbaTPApBQj8v8JCWsSIj8JGCuMOzQ/Cdqp0vS/CQloTIuj3hjpNQ77+98J+VtHh8Kifgr4YiXNGo8J66kvCflbQ48J+VtFgKF0IVJC7hgKDhjqtUQDE+77+9eD174pasCg1CC/CYtIBg4K2Iw4d+CiRCItGo8J+VtPCQvoY94bW4OtGo4b24Kj3goZvwmr++OPCehI8KG0IZJFXCpfCeuLlNXCJj8Ke6tfCQpqzOiuCvggoTQhHqrrxGJlrwnZSS4KiBNC/RqAodQhvwkKy/e+GooScuKiInw7cnTiY84b+i8J2YqmAKO0I5LuqpkFksR86YzqlO77+9d1vwsJui8Ja9keC0jFjhn7figbDgqZ4q8JCjrOGnkFXqoLFt4LKOKXcnChhCFijwnZK0Te+/vfCflbTjh4Lgt4Hjhr8KCUIH8JCdjU/IugoUQhLCriV28JGlg3g8LyLwn6uwyLoKJUIjZeCpiC7DpfCfoadN77+9PHw8Q+Gsr3Lwn5W0ZuKBsSU7yLoKDUIL77+98JG0uvCfnLEKNkI04KiDw4JEP/CRg7Lgsrzwn5W0XC7hvZ1dTeCviOCsoi4lJ+Cugi7NvS7RqCoiJiYz0ahyMAo5Qjfgt5rwn5ucbXJJ8JGPoXsm8J2dmMKlPFPhn7Ei8J6jh/Cfn6RcTPCeo47wn5W0P+OAlmLwlqyBCi5CLCTIuixX8JapnOCnn/CWrZsqdcOwItGo8JGOvGvgrZ/wnrmS8J67sS7WsntSCgJCAAouQiwlP0YnXn1f4K6v4bOu76yVMe+/veC0q0YyLi8q8J+qhXvIun3hg40v8J+ggwoNQgvDn/CRj4/RqOqshAoOQgzwkKS/dvCRgr/CpT0KL0It8J67sOC1ufCflbTwkZGgLip6csi68JGKimBgYPCfn4QlJNGoPyZ4PPCRto5TChhCFirXsPCRiqkq4Kyy4a6Y4LSBJT/Dui4KI0IhZCPwkLmmKcKlYC7wkKm4WCLgurtPJMi6N1NGKSl7dzotChpCGPCfiLPgtpPRqPCegag68JCgt2ly8J2LiQowQi7wn5W0S0jigYxVwqbhiZha4KyBQ/CQp5JNYHUuwqg/airCpT/wkbuq8J6Fjjk/CjlCN0/jgIFvwqUk77qRPsi64Z2D8J2StPCQvIPwnou/4aSlJeGJmCoiJfCRpJ488J6Bl+GqsPCeuYcKJUIjXfCdkrvwnrmXzq844KyB77ite/CQurDwnL6g4reM4LCvJyYKIUIfPsKl6qum4KeHXGDwnrqpKyXwkYayIlVXej3Dpe+5sQo5Qjd6LvCRlr7wn5W0XuC4ofCdhYPwqoq0Ll0l35lI8J6llEA68J+VtCUv0ah+Wyrgsqvgp7E14KGeChFCD/CWvLwg8JGDkj1FJiTDsQoqQigzIvCRjI9fc31R4KmLflw68J2SueCuqW7wkaSJ8JCWtHhcKyXhj7g9CihCJuC7mS/wkL2N8J+DivCRv5EtfSjwkbSAXMKlJsi68JCpl+KBsCwiCj1CO8K9dSXwn5W0P/CQto7RqPCen6Hwmr+xe/CQlKddYFLisKvwn5+D8J65rvCegLjDiE9KcOCsiiXgq4kiCglCB8O2XzzCpW4KIUIf0ajwkY2w8JGLtyrwkYyA4q6Q4KytPfCRio0lLeGmqwoCQgAKGEIWOj8nyLrit4PwnZSX4KeC8JCOjOKjkgorQiknO8OAwqVwWeCssz/wn5W08J+Fn++4jOChqvCeuqfwn5W04Kav8J+DngoQQg7IuvCRh7Tita8qyLrIugofQh0m4KeI76y0Ii7grrDwpqu+8JCWlCXwnoCpeSZFKAokQiI48JuxufCumbPwn5W0aW/IujpceyTwn5W04LGLe+C4g8OgCj1CO+C3tDo/XPCRtJnvv70mwqXgsaFg4KC3LuK0syI9Iic877+9IUDvv4YjJPCQpojVgMKlQuCouDrwlr6HCjRCMu+zt/Cfn7Bje/CQs6w8KvCflbTgroNI8JG2ovCdkp/wnri2OCRGLvCQj5Na77mb4LW1CjRCMsO4XNGoeyTDocOx8JCLocKs77+9wqU/JfCflbQqS1zwn4mAQ+Cpp++/veCvhjzwnpeVCjdCNU3wn6OBePCRpZfvv5Rq3ZdO8J6jkWDgsKvwn5W0yLpcOiJGfibgrI8vbT3gp41cyLrwnrmRCixCKuC6tOCxii/wkaSRYPCfiZHvrYDgtrXwn5W0VUg3yLrwkYqZOCEnJ++tgwo/Qj3DmSbwn5W08J2LseCwlM28SPCen6Lvv73CosK777+9e2A0wqXqrILwkaSkSyI8QHFC4b2ZPMK88J+VtCUnCkNCQfCti5XwkJalJFYk8J6Ao27gpo/vv71w8J2SpVzqpJVf8JCth8Kl8JCMtHbgsYcnw4/wn5W04YmdOlfgoZjwkYyPCh9CHdGoPPCflbQzJ2c/JuqZgEbitq7wkKi48JGMtSZgCjtCOeGgmPCdvKdgPS/hsYngr4xUSPCWrbZC4Zeg8JCKmCgqyLpPZ+C3hC7gtoLwkbGE6p+R8JCgt3siJgoDQgEiCh9CHVlTPz5Y8J+VtNGo8J+VtOCmsFHwkYqKPTzvv71eCj9CPeCxh++/vSrtnrpHJz3CpfCRiIV7yLrwka+wPPCRiIXwkJ2B8J+ppXvRqMKz8JCkq2zgsZUl4LW88J2UlyIKEUIPPSbIuvCWtaXwkY+QwrZ0ChpCGExRyLom8JGPlMKlJfCfooPwn6uw8JuxuAoCQgAKRAoEbmFtZRI8QjrwlquT8K6lrzon77+98LCpk2k6LvCQsojwnrKWJvCfmbHwq6av77m04KC9PMOeYXYv8JCFsi/wkbSJCg8KCW5hbWVzcGFjZRICCAQK0Bi6AcwYCqYYCgdjb2x1bW5zEpoYsgGWGAo2QjTvrYEkOsi6dvCWvb3wkZyzwqVcw5fwkJaUICvjh7fOjPCWq4U/8JCEgjxcw4/wn5W06qC3CjBCLiYk8J+Dh/CdhYguJjbDpPCeuqXwm4CiRzzIun3gtoI18JG8gll74Kqz8JKQiDUKCEIGPTHwn5W0Ch1CGy7wn5W0PfCQq4w9ficvJPCWra3grYLwn6GnPgoeQhxgJXg8O1xg776J8J6lnnQne/Cdkpki8JapoEBZCglCBzt78JCVvS4KRUJD4KyH8J+VtDo9QvCQpJPDue+/vXjhjY098Juwoci60agv44aIefCjgY8/dE3gt6hNwqXwnrm+Kl/vrKfwkaec8KuunwonQiUlw5PCpeCunnvgu5wm8J66hcKlyLpFdPCWrZvgrJDwkY2A4KqvCi1CK27RqO2etfCflbRBNGDvv7088JGZq++/veCqrfCQrIDgrr/wnZS9YXc1ezwKGUIX0ajit5Ek44Gj6q6UwqVZJ/CeuYngtoMKA0IBIgoMQgpC4L6y8JGNkGAnCjRCMvCvoJMm8JasmlXit5zguLZCJyt6KiXwkIy1VfCQj4hgJ0M84KaQPD1Pzobwn5W0wqUkCjhCNi9h4a2L8JaplTtF4am8LvCRsqtc8JCGoHBe4K+rXPCWraHgrYDCpVQmwqVke/CQsIMu8J+voAoyQjDgtIgo8JG9ku+/vXYkJsOHKuGig/CYtIIv4Ki54K2j8JCEgeCvl9GocDc34aWfMyIKNUIzOtGxIio6dnPIumFh8JCGmeODgzjCpWsvXyVQP/CeuZ89W/CeuZ/wn5W08J6jifCRvIQmCg5CDC8/JOCumljwlr+jKwo0QjJ7M3ApJSdVL2tcJvCQvIrwn5W0e0/IuvCQkrQ24raj4LKlwqVw8JGkt/CdkL3wn6CEQAoPQg054Z2iSsOoOvCQlKc8CiZCJOKBu3rwn5W0JvCQi7PRqC5k8JGOjlzIujcwNiXwkKeI8JCMnwoPQg3hjJNBcS/gtLLikYl5ChxCGvCQto/wkY2yP13qrKvwkbSJSiop8Jy3iMO3ChFCD+K3mGNc8JCtnXhf8J66gAoCQgAKE0IRKiBewqUiPMi68Jywqysiaz8KC0IJJik64b2BwqVrChRCEvCdlYMl77mpQl48PWxcK+qsigoNQgtKUynwkbSEOiQ/bgocQho6Ji3wkYqB8JGNl/CflbTCpeOHsSowYVA/OgoIQgY6eT1yVCoKHEIa8J66hG/hv7o/8J65i2A9Jjw6aSZT8J6KkC4KGEIWJC7wkY6EwqVc4K2c4reeeyfwn5W0LwowQi4uwqXhvYsjPcKrJsKl4LuGXPCeuqjgsKE+PUk277+9fcKlKuGxocOpwrrwkYWqCj9CPfCek6rwlq2EJlDwkbageTrwn6qgPSXwkIW8w7hdOuGdsGBqOuGKivCeub7gu4zwn5W0dE/wnqGD8JCtrngKA0IBagoHQgU677+9IgoFQgPIum0KCkII8J6frfCQu4MKMUIvX+KDreCrqz8/4K+GPC7wkbuiemDhpbFc8J+HqEfwn5W0YOqjlT0pP/CQoJMxPSUKIUIfXNGo4LOecErwkKy/TydDyLrwn4COJD896p+QJlB7PQoQQg4mJfCxmq4q6qmGXuOFqgoiQiAnY2RpKnfDvT3wkJeEOm7itqo/PMi6PuqcujoyImkkIAocQhpm0aguJfCav7I68J+JgiMl77+9Y92CXDjDiwozQjFTJC9q4b+077+98J+VtOCno+Cyr+K3k/CeuKpiVfCflbTvvocn77+9MM28YD3gqYEnCiJCIPCQiqNg77mO4KqqPGlX4YyS4LKOMO+/vfCQq7Uy4bCmCgRCAmwiChVCE+CulOKBtj3wkY2X8JGNrC89IkIKKUInWjom4KaJ6q+0JfCWq7TwkYWrSCZYPfCQl6pF8J65oknwkbyjc8O6CipCKPCei7/wnqOJQi7vv73gv5Hgs4rCpS5TPUvwkYiF6q+44aSxLvCfqK8KC0IJ8J66oVDgsaEkCiZCJOKCpPCepZQmauGdr/CRg5Rv8JGRleCqsnVETVzCpXQ0e2PekgoyQjDgq6s/JyTwka+WPyrihJhqe8K+8JGTli80IuGds30lJOGmkuCph/CfiaDhqofgraMKO0I5NuKBldGoYPCflbQ68JCVjOG9pFDwnp+1QfCehY5gZF5gPfCctYR78JCgiE15XOqpiVnwnZKx4Yq6ChRCEjI/JVEwSUUi0agkUfCQgIMvSgoKQgg/Yz498JC1hgolQiMrQlbRqPCeuLloJybCpci68JCAtvCWuabwkYSrJFPwn4ewJQouQiwlwqw8e/CdlIkmTfCdgJJIdTzwnriB77+9JMKlwqh7ZPCRjo7Xm2TwkYO0QAo0QjJd8J6BoibOleGmqNGoJGDDgcOIVEE2ZkUg4LmRXPCQo6N2XNGo8J6EmfCcsqgn4LSIXQozQjHguKDCpfCWv6Hvv70i4LGmSSjwqZyGLGDgsZjwnrmf77+94ay+QSXqp63Dj/CfoJUnCh5CHPCQnpXwnrmZ4K2p0ajwnZKibOGzgioqNSpjwqUKQEI+yLrigrvguIpI8J+VtCAi77i+8JG0unFSYfCWv7Dgu5nRqHFg8J+VtPCroJhH4KmRevCflbTwlq6A8J+po1UKQEI+8JCWlfCSkbB9PVjDoiXwnZKm8JGMvu+snmDwkLuCSHvwkI63bCbgs4HRqG0k2p7wkK2jWj08762DK9GoIyYKEEIO4Z+mTuCnoC7DpPCek7gKA0IBLwoeQhxcImV28J2NsGDwnrmNJ/CQpL/wkIWtzbzgq6kqCgdCBfCUl6YgChxCGiThs5fwnZK+8J2Uj10vw65777+98J+VtGd4CkZCREAnJiXwlr6eJ/CRjK0m0ajwkYOxw7Z38JG1qCLwn5+i8J2gsfCdlInwkIC48J+VtC9Y77+9JzLvv73Cp+CusD3wkI2VCgRCAipvCg5CDOChqW8m8J2UlzU4JQozQjE68J2VjkPIuuK2qfCeoYDwkIuI4KeI8J6AgC7wkZyM8JGYij9NJmBJXfCdlYbwkbSDChFCD0kq8J6AqFQtIvCRmrAsewoVQhMuezsmKu+sniciyLoqLyTwn5W0Ch5CHHQmLi/vrYBXKuGNnUw68J2SuTritrbqn5E/JXIKGkIY4KuwL2knJfCRmaIiJ8Kl4aaXOvCflbR9Ch5CHC9BUvCQlpTvv70/LixcLSbwkJWT8J6lnu+/vUYKRkJEOuqikcKs4Ki2P/CSkI/RqHIi4KG68J2Sv+KBt2DwkLuD4KyuX+C1iPCfqqRRKkPwkI2Qw47Dt+Cxqm7CpT06TCXjh58KEkIQ8JCukfCRjIzgsarIujwoWQpMQkrhi4Dwk6CQ8JarsjnRqHguL/CWpLLRqPCRj6LDiPCeuKfCpeOXovCdlYY96puv8J+puCY+8Jy6pvCQkqUq8JKRsCs9Klx7PeGqkgoXQhXwn5y1P+GnsmDIuuGqlXsiJFnhg40KEkIQ4LOjOfCRjbFb77+94Ym3JwoQQg5QwqXwnZSJS+C3hMODJgoyQjAkwq/qn5Pgu4588JCNsSXhjJ864LSx4b2XJ+C/jyRt8J2UvlU/6p+T8JGOh/CQqaMKM0IxOjLvv73grI898JaijSI68JG0uvCRjLbIuvCRq7Q94LylKvCcsp08JOKzpSUl8JaErAoaQhgiw7TwnrmJyLokPDnwkK6rL2BvJCHhjJ8KKEImMWPwlr6PJuOEruCzlSHwnaqmdNGoPTjwn6K4w7jCpfCeuargu5IKC0IJIPCSk7HitZFKCjpCOFzwmr+78J2Su0Jg8JGxtPCRjLJ+4K6KL+CvkPCepZfvv70l76ymbuGqti7CpXs1JsKwMGDvpqc6CidCJV/IulwkyLoibeCriUnKq8OP77+91o88JvCbhLJx4KmAcvCflbQKSUJHMcOmS/CQq6VZN/CeuZcnbDLwkYGx4K6U8JGNsTzwn4miJ2fqk6vwkKiQ8J+VtCzwkaCOOu+/vfCfgqTqkqp44Ymd8JGkiVwKDEIKPyTwmLSD4YONVgoOQgzRqPCRr4Vh8JGktyUKH0Id4reJJ3snOvCflbQ92Jc/Qy9G0aguyLpJ77+9IncKEAoEbmFtZRIIQgbqqYHhqrIKDwoJbmFtZXNwYWNlEgIIBArHCboBwwkK7ggKB2NvbHVtbnMS4giyAd4IChhCFidkT/CQuq1PIvCRjJPDnj5gJvCdkp8KAkIACi9CLfCdoqg6cuGqkeCsryUiw4XgrLfwn5W04K2IJ0Mwbi7wkJeR8J65lPCeuaTRqAoHQgXwmr++YAoCQgAKIkIgTTo3IPCbgLxUX/CQobfwq5SUXFHwn5+wP1xDJmDgs5YKTUJLP3bIui/wkK6sJjZf4K6Z8J64gOCzni8u8JGIhi/wkKaS4K2M8JGyq+Czp+Cpm/CRjovDjtGoX+C3tPCQk7jZhMO+4oCGJvCQrq8qCidCJfCQvZPhgbdXJFjqq6xufWRL77+9ZuCnjOGLjCopXDzwnoqeMjoKK0IpYsi6w4IkOe+/jPCQg6XwkYuN4YqLYNGo8JG0qXvOhCrqopvwnoqrw5cKI0Ih6qyxTnzqrKxcw4YiPXEyJOC3lO+/vXslPDg8V/CQqJYlCjtCOdiY8J+VtDrvt48o8J6TlmfgrqPRqC/qp5RgyLpR0ajCpeqrsScu8JCKlzDiibg48JC/iPCdprBgXApGQkQp8JGWqGVeXPCWqYzDnGvwkIaa4LKO4rWh8JG0iXLwkZyg76y+MSXwkY2QPfCRj4dj4LGdOi7hpr1cOvCetKbDhy8tPwojQiEib/CQgL1+PUN7JPCQoLd58JCmvT0m4b2TyLpy8J2SvzUKFEIS4LK9KmY/8J+VtCY6OvCflbQuCjhCNkvqn5g88J65mz7Dly/wkZmX8JGbgFxCKijwn6mzTV7gp59YaHNiwqXCpS7wkIGRV0/RqMODPAohQh8877+9PcKm8J+BvFw/KvCRhYF74KuL8JGKhfCbhaRjCgJCAAoqQijCpeCrujrwkbS6Ysi6P8Ok4YyVL+CoqnvqobN7wqUubuCumibgsYJ7CjBCLio+4LOiJfCQrqvwkKuDT3vhg4dgyLrwnri0biLgra/wn56+XvCRj4AvfFx+PSIKE0IR4aqAe/CWrok8Oi954LGGTSUKIUIfJFVMJSpk8J6ln++/vfCRl5AhTnUi4rGX8JuxvO+/vQoxQi8m8J+VtDp177+94Luf4KyDL1wl8JiOq8O1P+qso/CRprfDouqhm/CRg7l6wqXRqAoGQgRO4KeiCjZCNFDwkKiy8JuFpTYk76yU4aqs8JORlOGkoW5WLyZuciJpKvCRvLFVLippVOGjqNC+8J65i2AKPUI74K6/cUFh8JCavvCRj40vLuCukOCmqGDwkbS88JSTrWHwk5eMK8OgL+Gbt+Csgk9y77+9W8OAe+CnnTIKF0IVJD7wn4etKk7CpcOfPCc3TPCfiJZMChJCENGoNUTgpo/wkKSie/CflbQKPkI8J3hT8JGmrifIuvCWrZ4kYW8s8JGDk/CeuKfgtI5g4aeRUNGo8J+VtCbwkr+u4b2FItGo4bKvSD7wnZODChNCEfCRm6DitK3guLLhvbbvv70qChpCGPCQubMzJOC3giJgIiTwnYS34rKA8J2VhAoLQgnwkY2iImAtJVoKIgoEbmFtZRIaQhgt8JG2mHvqoYzvv71LUuC6nntM8J65i2QKLAoJbmFtZXNwYWNlEh9CHScz4reE4LuX0ajDgfCQqKvIuvCen6I64ai877mYCr4PugG6DwreDgoHY29sdW1ucxLSDrIBzg4KN0I1Kjpv0ajhsr0l8LGvpntc0ajwn5W0QUEj4Kq28J2RtOC+p8OAJTw8d1wxPfCbsZ1bMErigpEKK0IpRuC1j+CugiUiKPCeubvIuuCwjy5fXOGJjC/wkIag77+9IiXCpfCRtpEKDUILa++/qyVx8JCeiT8KF0IV4K6cyLomUPCSvqzwn5W0Pj834K+zChNCEXU/JSXgsZbwkIesLyfwnYurCgNCAUcKJkIkIjwkdci6KkbIuuCxnX3RqPCQjo0nXCfgoLR+P/OghL/vv708CidCJUNDKkPIuuCukDbwkLaPJvCfg5XwkK2mK+CmhcKl8JG/kvCdk4AKOUI38JCer+CupPCtiIFw4KmHIuChnn0q4aq/XC/wn5W0P/CRgYt74oGSwqXwn5W01KHwn4mR4rmCewoHQgXCpWIlfQozQjHho4bwn5W08JCFpfCQhILRqPCRlr4o8JGPhz3Xo+qplcOpLifwkKKIbm/qrIvwkJGxCjZCNC/RqCQvSO+/vfCRpJbIuuCtneC9s8OW8JCDiFVq0ajgrJwl8Jy9t/CRpLfwmLCtJS/goKYKEUIP4LGs8J6fqykz4ae5wqVCCjhCNvCfn6fCteKEs8OwT1okXUJ7yLpnWeG/s1zgspzwnoGX4aCMJOC3lsi6Py9nKvCQqLnwkY6HJgozQjE8OvCQp6rhvJjwkYyzyLrIun48JG/hoph88Jy9re+tgO+/vVzmv4Z54KuL8JGIpCw9CilCJyUk8JCtpVThi5Tvv5vDvvCdkqkz8K61pDxYJFHgt4Ul8JapqeO2hQoSQhAi0ahh77+9elE6LOqrqCcqChFCDyXwnrq24Z2lKuGnk+ClsAo0QjJxyLrhn7ZQ4KuQwrXIutGo4K2cPfCQpKglMCc8TeC3iuqvufCQo6BYPj0/8JGni+Cujgo6Qjh6JMOtWsKlJMKvJ/CQqIZ7XD0nMuK0p/CflbThjIcoMci6YTx48JGsiTrwn5+we8i6PMKl8J65qQolQiNcZTHwrq+xSyhD8J2UkDol8J64p2wm8JGNsMKlP3tNT3wveAokQiI04LOzPWZpL++sgybwnrmiV+C3qHU6P03gvKzgp7M/Wjx2ChlCFyZ3J+CukMKlPeK3iCnwn6ukLuqfkFxgCgNCASgKGEIWwqUxS8KlKiHgrK9JJuCmsD0t8J6TtAoXQhXwkKOkJljwkK6bJyp7ceqpiCVLUz8KHEIaJSvIunvhvZdH0ajvuKjqnYhkP8Kl8J+gil8KDEIK8J+VtHLwkJadIwobQhlVwqUnddGoRT9rSTou77+9JGg4Ii7wnrmUCjVCM0bgr5ciIuqjl/CRmIvCpfCeuKIm4rSINSfCpWB7PfCQjIrwkI+R4YqjU++/vXtE8J65kgo5Qjcme9GoQ/CRtqU98J+ppOC2uuKBnOqsjsi6InFVXDrwnp+t8JGFonXwkbW3NHXwkIageXV84LqlCjpCOMOUPH09OvCQiqfwn5W0Jj/wkpGwKDw8SHFp8J2Zk/CRg7HgtoLwkYqnUjwkOvCehJ1rYHEpKjwuCi9CLT7RqFJp4K2i0ag9wqUv0ag6XEE9YNGo8J65pCV7w5/gsZnRqOK0rSI1WiDIugocQhrvv73wnrmS8JGMu2nOhcOQ4K6DYPCRr48uVAoqQijDuzwy8Jy6k8i68J2Sn++/vdGoJvCcvovhi4DhiopMW++/vfCRgbIrCi1CK+CumuOAluGrhGbwkJalKiTRqOK3hOGJjPCQjYIiWPCRoJgi4KmCwqXhg40KKEIm4b+Xw7TCpS1uJnsm4aqQT3UtfkLhg67DpPCbhZVC8JGMsO+/vTwKMUIvbuC6ivCRsYEk8JChj0N71ZQ/8Jq/vXRLIl8lVuqpiD/wkZuazb0mJT0la+GNoVoKKkIoJ3kqIuGLkW7wnp+tL++/vXzvt49VPVU88J+mhOCmsvCWvZ8n8JGxmQooQiYqPG9a4YOHOmI/IsO/Yk11wrkkyLrguojgspDvv70t4KaybTo3LAovQi3wkYSg8J2qp/CeuYfDlFLwkZOS0ag5w5xZ8JGXllzwkKC48JGNlyrgqZ5KaScKNEIy8J+JkFzRqDfwn5W00ajwnbye8Jaik1fwloSjP/CetJ5gYNGoPHwqN/CRjr428JCgiCoKMUIv8JKTij/wkYO2JC5q8J+rofCRtIQu4KiqVlzwlquBJntEJOCwoOCunFw96qCJwrgKLkIsOeG8gVlS8JCAvHUv8JCsiDPDpD0n4KakXFtG17HIuj06N+qphipSQGLhhJMKEEIO4Lqawq9tSXvqn5MkUCQKCUIHP/CRpqZjdQoRQg/wkL2Z8JCDtlNdYPCforkKMUIvLizwnrmX4LON8JGah/CQlrjwn5W0JfCflbQ/LiPYpGR94KyP8Ja6hinCok9QPi8KMUIvcWoi4a60POG8mu+/kn1R4Yq9Lk9m77+94KeI8JCBmeCunGFh4b2t8JG0uiYqe3EKCEIGYvCRjK9ICkYKBG5hbWUSPkI8Z8i6bz074Y2BaCIv8J+rkHgvJ/Cav7bwkL6x8JuygDB5IiU9a+GJkOC1jTrwsbW98JGyoiTwn4+ZdNGoCg8KCW5hbWVzcGFjZRICCAQKqhu6AaYbCu0aCgdjb2x1bW5zEuEasgHdGgorQilg8J+isfCeub4jPFMu8J65l/CRg6LgsaFN8JCWjjDvv7084raFP+qZvQofQh3RqOCtl/CWrZtq4aCX8JatoDonS3vgr4p78J2SpQocQhrwkYqcSvCeuY1g0agn4b2Z4aa74LeU4LKaPAoKQgjwkLWrKnnRqAopQiclQ/CQlo4yWFxa6qe6POGYgMi6P0o6JMuW4b2Vcirwm7KDJ82/0agKGUIX8JCOs/CdkrtfP24kOsKl4aW0fnsuRCQKREJC8J6hoSA8PO+/iiXwlq2Ze+C3hPCRhZrDruC7hmDwkLaOOvCRjaAnNCYoNPCQv6Bc8J+CvnHwnL2p8J6AoOCupDwvCkRCQicq8J2Sv/CfgaLwkJKgLvCRpInIukrwkIWmPG0i4LOqyLpaJ03wlqmhOvCRtLzIujjil457JfCRoLjhvaYmLuChqQo7Qjkq8JCNs3fitrvCpSss4LGL8Jy9pfCbiKHwkYK+feC9gfCflbRETiXwkZya8JCLpeC3liknRTNTwqIKM0IxL1A6YNS5JuOBty498JGKoC7RqPCRj5jwkISPJUwzfjPwnrqCPS5KX2rwm4qoJ8KlJAoQQg596p68wqXwnZSS8JCrsAorQinwm7KXPC7wkY2LVUVRVvCbhZIv8J+ItDLwkK2cIirgq6Ei8JithigvIgoIQgbgrYTgs54KK0Ip8Ja/oyZ5OixLKknwn5u2K/CehY7wn6Kb8JGkuEgnJirqn5Mue/CcvJYKHUIbImjgroMv8J2LsF7DkOC0j9Gow77wkbK0ciYqCg5CDFDwnrKkP3BgUiotYAojQiHqn5PhgLI94YmLW/CWqY7hoLhW4a2iduCzivCWrZbRqEUKLUIr4rC18J+VtCc/8J65jeqsi+GKjdmEdfCRp6Pwm7Kfw7U877+9VPCwooDIugo+QjwybS9Q8JGBrGw9Jy7CpUIuw7AuKvCRu7jwkYS6e17CpeCjldu94LKO8J2qqPCWvpzgqYsk8JGwgOGxgFYKH0IdRnsq4K6DwqVLL/CdjKfhppDqvqRrZteZ8J2Sn1YKL0ItTfCRm4lp8KmHjE/hpbHwkJaP0agx77+98JGysM6RwqQ88Ja5geqSuypcbj1KCjRCMi3wkY2yYFDqn5Dwkaia8JaqpuGMiPCRioJg8JGZk/CQnoQmKsi68J+VtOCnoMi6J9GoChVCEyQ/JfCWvanRqPCRsLPvubDDujoKPkI876q48J6Cj28jMyZcwqXqn5PgsJDCu8i6zozgtqHhsYla8JKRskIqOiIqe/CeuLtc0ajgr5cu8J6fqFMvCjxCOvCeuYsjOnvgqqrwkr+CUOqfmy5H8JC6rVfvv70677it8J+rsn0u8JGPouCtnfCRgrQ9P21YJ/Ceip0KEUIPwr7grofRqFUm4Kay2bBCCi1CK/Ceua95JPCflbRg8JGMufCflbRpZuK0pz9LK+Czil1nwqXwnY2tWeK2qn4KIkIgSfCQoLjwn5W0MvCQnpjCt2/wlr+i0ag6XNGoyLpoY1kKM0IxVjoqJ/CRsII8LickV+CovFkkwqXgtbvIuj0v6qiWZ1zgrqjgrLU5ImxH8JGbglYiPAojQiElPfCRpqV0Jzrwm4Sy8JGKjOGPoW5oPyY68J65tDx4OmEKRUJD8JGphMO3Ju+shjbXpOG8m++/vXnwn5W0dVDwn5W04LGj4raO4KayWzLhoInwn4GWJNGo0ajqqYzwkKSm8JGOouCogQo2QjTgvKY64Kuq8J2Nsi3hjpY9JPCQnoPhnJFyJ++/vVzvv6Lvv706yLol4bOBPGXwkaqX4LuGCiFCHyRfRSY2e/CesoM64LGZ8JCOkF9FJ+C0hyIkS1pUOkgKQkJAJSdzyLp7S1zhnapHe/Cfm6pi8JGitEt28J+JovCflbQ8w7Z78JGjv++/gtGo8J2EjvCflbTwnrqQL+KAgci6Lgo0QjLwkbGFe1rwkb2G8JGPhUzwnrqn4Keg8J+JgfCflbTwkY+h4LKyOGjwkL+p4bOwUsKlcgpGQkT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VQhPwkK2O4K6P4bOgPfCfiaPvv717CgxCCiXhv7LitYNXdFgKLUIrdvCflbRg4Ky8JvCQnoFH4Kug8JGKjTzwkKmAJHjwnpe/NPCRtLzigJwlLwooQiYi4KqzyLrqma3CuOC0hu+/vTlG4aS1Z0rwm7GZ8J+VtCFZ8J+hkQogQh7wnrqEbeCtoCbvv73wlquYNDrwkbCD8J65i+OIhi4KIUIfXPCeuLngsZgkQ24qelM98JCgiCvhiovwnp+i77+9UAobQhlaPPCRhYPkoaXwlq6NJHvhioxRKSDhsr5BCixCKi/wnou/8JG2oNGoJTo8YOCpm2MqNvCflbQ64LeS44ibfTo6YGBLJns6PQosQiomLyp7KvCQgIPwlq6GdnkifvCRmZdK8J2TkVxV4rqcJm/wnZWCO/CdhbAKM0Ix8JCpuOGqhSUmK+CovCQi15jwm7KZKi5xYTo3JC178J2UvFTgt57Co8Ko8J+VtNGofAo8QjpJ77+9JPCflbTwnLyaT/CehKXwkaaj4Yq6J9GoLj4q8JCLtFxdyLovMiZk8J+VtOCqvmNg4LqURl1FCgJCAAoyQjDwkoWS77+98JCHtEJ7KnvgrL0k8JCguCdpeyQ5XOCogcO28J+VtPCav7Lhv7JgRjkKOkI4ZzPwkJaVKjJ21o3wkLSEJiLhiYx7M0g74LOoU/CQpLDRqPCQuq3igZlsRe+/oDEq8JGIj3ZcyLoKNEIy8Jyxp/Cav7vDqirvv5LhiaUl4LSe6p+T4aWAe0Y5IWN3OvCQlqTRqEM6J/CRo60uIi4KRUJDVMOP8J6KoVXhpLAv8J+VtPCQoITCtC/itr5d4YuZQMi6OvCRv6Ym4oC3d/Ceo4glfuCunCI68J66qG3RqPCRjqLRqAozQjEn8J6KoVPDmTrwn5CMXOKupDrwlrWLcnHvrL7gsrgm4aqoTMOiYWh7Pzsq8JCKij11Ch9CHTrwn5W0JC5p4Ki4ae+tgTzhqI3wn6GT8J2SotGoCjZCNGzCpT/wkKqWPmDvv70uIjHwkIaXMeKDlVngqrLRqPCeub7CpfCQvLM8OVxQJUQ64K6jICkKLEIqJlw6QDpg8JGwr/CWraHgu4PtnrXgq7vwn62gdVvwkbahRO+/vUI84KuqCjFCL3vwnoWP8J+cqk8nYPCQoqxBe1nwkbWWdOqnqD/CpS9QZuCxmTw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yjeGvv+G7hPCbhLLitqhjJe+/vXvwkYqGCiRCIvCQnrolXT46yLppYirCpeG/m++/vUlyw6HgtqrhpbE9JzkKIkIg4LWm8JCVvDrgtoM/77WczokkYGAnR17igZvwn6qE0agKCkIIXDrwkJWywrAKPEI68J2NpCVgc+Cmssi68JC5q/CeuLnvv70v6qCi8J+VtC5d0ajwkKixPHpp4LOpViY9bPCQhqDwnaqoYAoxQi86ZPCRjILDh+KtuWHwkaefyLo8Ij/wkaSCZ8OP4KeN8JG1qPCWhKRgY10gSi4zXAozQjHwn6mkPeG+uT8zM8i6LvCRmZfwn6GSPFMqMfCQoLcuPWB7Jz1+8J6Cj/CflbR0ZDI6CiFCH8OnJy5g8JCdk8i6XD3wnaqf8JCGoOGkucq7dcWlQEMKNkI0JvCepZHVgPCbhLLgpqvgt53vrYTgrZdb8JCouSt7yLrCpX3vv70u4YyS8JGPl/CRj4hJSQosQirCpfCel79h0ajDqDPIun3wnrisyLrwnpec4L6Z8J64omDgt5bvuZfgpr0KLEIq4Laq8JCggi/wkY6pOfCRjIAqXFzwnp+tw7rwkJ6b8JCWn/CRtaPwkLOhCi5CLDpcT1nwnrqBXPCfn7BbwqVT77+VJXUl4LKPJENjU+GyuDrwkKiFw47wmr+5CiNCIVzhoorwkZaoS8KlVWYu4Ku+dOCwsXw+Wlnwn4+X4La3XAouQix18JCWlT/gtoEiJcK68JG0qMKkPW3hrbHhqqAmwqUqYnvgqZE88JCNgeCyggo6Qjjwn5W08J65lyLitbDwq6CbI3l48JG0uuqsjOGbsibgqZ7DjvCQqYIiJW/YiFrgurnwkZiQ4KqCfAo8Qjp00ajwkKehIsOFKVXRqGnit40kejwm8J2Su1Hwlq2h4LqE8J65lyrwkKKnP8K0QT9Ne1xKyLrwkbS6CidCJW/wnrqNJ+CqrfCWv7Hwlquye/CepLhJ76ye77+9Je+/vXPgprwKGkIYYO+/hyReTPCflbR7KjDgu4kqPyIlLlQ9CgJCAAoIQgY5OuCyjicKA0IBOQo6Qjgk8JCGmfCehLPhgZ178J+VtMi6L+GlsD7Wj2Xwk4yb4LGZ8JG0ieG9ukzwkJ6PPS/vqqhE8J2YogotQivgpokmyLpO4KeH77+HwqU88JCysPCcvInXsG8yVGxH8JG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KIUIfL+C1jF094aqiZeK1sDrwkKCCyLoiLuGlskA8Qe+7jgoqQihuw7DwkbaXQUcuJe+/vXDgoZ7vrJQmJTZyJeC/miIv8J+VtDxcJCc9CjtCOeKBhPCRjqYnOj/it5jwkYWa4K2dIPCSk6wjLy1QVfCRsq1m8JG1oe+/vfCeuaow8J+jgSU9NWgqfAo2QjQnPyR78JCmh/CQqKcofS/gsZVLYPCfn6ck8J+CtlFhVT9CJdGo4rqAU3lcJjrwn5W04b+CChJCECjwkY+XVGFae+qsofCeuoAKP0I94LueJPCdkrslJdegT3tDOivgrYgu8JG8iSrhg413yLrwlquCKuC6qeG1jcKlS1Yl4LKv8JC/tWnRqOGwrwoGQgR777+9CjNCMS7wnZCfw5PwkI2WTNGo3rAg4reUOkwlUmDivKQ9JDrwn6KWIiQvP18u8J6AsCU1wrkKLEIqPEnCpfCRjYzwkYyD4aqF8JGOi1Fq8J+VtDcuPFxv4aesJyp4Qn3wkKiVCgRCAj0kCjFCLyTwn6qGMDo4LO+/vTfwnZK2fVPvv71rKiTguq8lJOKvk/CRpqUq4red8Jarlj1hCjVCM1LitKfgt4p8JSfwn6u34Kay8JCgpl7grL4uZcOIPUrwn5+rOCVRdOGfoVx8e++5pCInUQo7QjnigJ3vv70v4b6+8J+mvT/wnZSK8J66qDo8Lu+/vSjwnrm76qySLiThrI9ow4578JC5uUnwkbK2KmUKPkI877+9JXUq8JGvsCJ7e9Go8JCumWPWj/CQuqzgtZou4LGjbjLCpT89P9GoYfCdlYzit5jwkIqb4LqbJ1xiCjNCMUNA4LK1Ku+/vT3Ct+K0luGnlj9UPzwl8J+VtO+/vUbqn5Pgs5Zc4LuGw5zwlr+gKksKJ0Il8J65lzs+4Z+x4ZOQzownWEjwkZOQ8JuFkOCgsjzwn5W08JGWlQo6Qjhs8JCNrzQq8J+VtPCdjajwkY2L4Y6hyLpN8JG0qeC3nu+/vTbIujrqq7Fv8JCohUgi8JGnm+Grgwo4QjZ7ZMKl8J+gins377+98J+CsSrwkYqI4YmYVE1gTSZEQC92w68mOntaLcOf8J64ofCfoIfCuXMKIEIe8J2UlPCQhqBcOlfwnZWGR3vCpSfwnou3OipSOl8vCihCJvCRpL9h8JCqhMi68JGDsNaxdM27LzwnfS9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RjLlsOiXhvLl78J+puCJV77+98JCGoGLwkJ6CM/CRtpVH8J+VtOCvhuCthy7CpUPgsZ0l4LeT8J+ptTQ+Z+G9peC1jgo2QjTIuuGkl1zRqHIkyLol0ajvv713TSbhj7zwn6S9InBhM9GoNWXwnriCJPCsoaskJvCfgawyChhCFiR+4ZmWLi7wnZ6oOj1z8JC+sHXhoJgKP0I96qWjPMOU8JKRsvCeuahn4oCCK/CQurAl8JGPiuqokMKlXCfwn5W08JGFgiZTL07wn5W0PXdqw5Tvv70vKgonQiUq4Keccyx6L/CRtafwkK2e4rSGLTwu8JGppk3wkbykOVQ9UsOHCj9CPci6bFXhvZsk4LOy4LqxXG838JGkmPCRhYJ8LvCQgZo8JjrwkLCl6qqvUHfgqorwn5u6w6Xqppgn8Ja1ki4KG0IZZksowqU9w7TwkZye8K62ifCdvKnhpKNuLwowQi7grIUnUPCflbTwnYeALypzVTxowqUkSc2/SeGJluCnhOK0p2jgt5vIumB7KmQuCh5CHEo/OyXwnp+t77+9K/CQpLI84YyS4K6jJOGgg3UKLUIr8JCghPCfiYPgqKI68JC0uD8lwqUucvCRnJ4mLz0i4K+IJXti4aWaIuGzhQpGQkTwnqWf6qyRZzt+L34ibjMu8JCziOODgsK04LK31b0lLeqglfCQh5g/IPCQi6fgqYfwnYur8J+Jgj3wn6q2VF/Dk+K2sgoUQhIxZfCRnJokRsKg8JCrjfCflbQKEUIP4K6fRXHDo/CQjoLiuZkiCg9CDfCeuaE/4rqXYEvvv70KB0IF8J+VtFwKNkI0yLprYPCQrqwnLWhZaj47PzvwkKO1bmPwkLyYIlzhiZPwlr2xLiBe4Kej4KaGPm7wrrSPPAo0QjLwkYqP4rWv8J+glOCsg3vgrooq8J+vqT1B44iY8J2Sn/CflbRL4YmL4K2dT0FBJeGrgwolQiPDru+/vfCQtZw8wqXvv71GQuKmmOCtiyXgp50/77+m8JuChwosQirwkbWlIu+ksS9ZXEZgOtGo4rO8QiYqJyY8fndH4bGpPXjVhCV68J+foCYKNkI08JG0nC/wkIOT8JGMgH1X4aCW3KPwn6K24KCx0agvIvCQs5h68JGKi8i61Yzgr4BIZic6IgowQi46Oj9gXPCQuaJnP+CrpuGLgCnwkZK/4aCEe1B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mVi/vv71fw5DhoIPwkIGAIntu8J+VtOC7hErwlq2bJFXvv4rigKLqpaoKD0IN8JGAlGBvJWgqbTBjQAoGQgTwnqWYChtCGVztn6NiJfCdkqbhuZ7hjKfgvawlL0s6YT8KIUIfOuG+t+CxlT1s8J60tk5Pw4Jq8JCehyfCpdGoJci6aAo5Qjdg8JGMkDrqqZhl6qmGP1VX8JCDqvCRg5lWJvCeoZt6bzLwkaSwcVwpdSLhhrvIungleznwkKu1Ci1CK8i677+9PUzwkKmQYC9IIyfIuvCflbTwn5W08JGklicl8JGZpuC1rfCdlbsKFEISTTwveyZcVOC9luqsjiXwkKitCjZCNFzwnoqTQfCRspngr5fhiKzRqPCRhLjIumxv0agl8JGWhnvit4Um77isKi5x4LuE4aCGXC8KLkIs8JGYl1fwnZKs8JGMsvCesqci8JCjpkLhpbEle/CWq6pRfcKl8JKQpz8k0agKH0IdSlzwkLaO8J6koOGqh/CetIpHXPCeua7wn5W0wqUKL0ItPz3qo5ZBduGqqSXhsag68J+JkCYiPHfgsaE4Kz/wnrinwqUiL/CQjIwi77+TCkpCSPCcsaokPcKl8J+vn/CQgr7wkpGw8J60pGE9PfCfg4R5afCeuIAiP/CfoIXgs51j4LGDQeGJnT3wkKKs8JasnfCRjKt7w59sUQofQh3wkY+Q8JC1qT9U44WtJuCtnNGoV/CQhIJp0aguJgoxQi90biFC8JG0luK6k+GDh+CtjeGKu+qlpvCQgYXvt7XhvJsmJj1e8JCjvs6MJlFqNAonQiXir4vwkIChwqVQ8J+VtD97en7YlvCflbQmLD3vv70nJy/wkZuECixCKuC2vfCeubRB8J66ofCQu4TjgrjwkISA8JG/ovCRnKjwn5W077+9w6TCpQozQjHJtDgn0ahZ76y+8JCLsT9lJNaPL8O/4LSFYdGo44Km8J+Ekj9iYOK+qfCQroIlP3l7CkJCQPCeuY7qr7Zc4Kuh8JG2kfCru5k40agm8J65sfCQhakn77+lw4nguqU8Je+/vW898JOIiXxQwqUndnt6eGDCpVcKP0I9UPCRsZPqn5FaPfCQk6le4L2o8JuyklXhj7h7M1Zq8JuygmAtR/CRjbE386CEncKl8JCSsDxVKfCWq4U8VQopQifwkYqM8JC9ulxI8JGEiSZUJuG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9PeGykzpoOu+thOK0osKm4aS7PPCQu4Pguo/wkKmDOsKl8J2QvAo8Qjrwkb6wLuGfsfCeu7FH4YuAXGbqrLk/YOK0huCmtz9C4KaQ8J+VtG4m0ajwkaCoJeOErSbwn5W0UlxiCgxCCu+3tfCRkaEvcDwKG0IZ8J+VtHvwkJCT4aqm4Y6QJfCRmaJML86fJgoqQihvIuCxnfCRpLcuRirwn5W0TiLwmr+98J28miTRqDbRqD3gro7wrraWCklCR/CQu4Lwnaql76yC8J64tfCRjosiYPCQpL89762d34o/ImzwkY2BXCfhiYzwkbCA8J65lMKlw4PwnrmiaF/wq7Kz8J+VtCtJCg1CC+qXoPCQrZjwn5CDCjVCM2Vo4reGe/Csn7bwnaGoKuCwkMi68J+VtHtbJF8oL+GqhOCwmuCzs+eKjS86762B4by/TwoMQgoyJz4qw6U64LKcCj5CPPCQqLgg8J+VtGBfw7ngqrl34KC8QWMq8JainO+/vWLwkKC8LkDgu5UlaWA84KyB8J65h+CmjD3wkZGfeAoLQgkiIjwwyLrgsZkKBEICejwKD0IN76yTRfCfgoAz4LKvJAo6Qjgq0agmw6jwkb+q44STyLo78JGjv/Cdkp/IuuGMlD0g0ag88J64j23DsOqfk1xhZyXwkK6c8JCosAo9QjtrPPCRqLEuPDt6Kl/kq4bwkKyJb++/vTzgtqU64oGUKkxt6qyL8J+VtHtpw4rwnrmnLO+/vTzgsZkqJwosQio28JCSonTwkY6OJeOAqGAu0ah78J+VtOCqgS4vZOGdrvCflbRl8JGHoiIKGEIW77+9e+Cri/CWq4lqbMKlyLrwnZKMZwolQiNgJCJO8JC/rndu8JCuqyfCpS/wkbCk8J6FgPCfoppRKlx5IgozQjHwnrmfcMKla+GdsiRDW1LgsK/wkIag8J+VtC7wkbWhPH1c8JGMsuCzoOKAkTomOsOACiZCJFl5b1F7Yy7vv70jP/CRhYVgP3rwnZKmJj9he8KsXHtc4rSnbgopQiciYEDgt48nYeC7i+CqhdiZJl3vv5c4XCLwnrm+4Ki4IiTguoRRV2EKDUILL8i68Ja1ofCfhaMKK0IpYD1mw6zIuvCRtpYkee+/vfCWvJnwkLCxXi5VRuCzncOn6p+a4LW2wqUKM0Ixe8i64reDJPCflbRI8JGghFouVfCRoINf8J+JoPCQub4k8J+qiCc4yLoiSi7wnoqUOgpAQj7fhyLvrLo9fmQgL2PDiCjwn5W04aaG4KifLmDCuO+rgSDwkZuVKvCQp4s/8JG+sFjwkoW48J6XnOqSue+shAo7QjnhprTitrjwq52v8J6Xv/CRlorgtI7wsIW64LSO8J6Ao+K3i+GvvO+/veqsruGpnuK0p1Uve/CQgr0KHkIcL/CUkIgkw4fwkYy2LvCfoqjgsYBtw6TwkLS1PAotQivwkL+v44SeVk5Lee+2lSJc1qNU4KGebMOz4LK8IOG9uuC6gvCdho5LLlEqCixCKvCRjIzqp5lELuC2huCosuGnmk8vWifDpk3wn6u4Lybqp5d48J+VtOG8mwoOQgxEJO+sg/CQu4Lgsq0KF0IVw5zgr61G8JGOizHhiZhYP+CmvC5vChtCGci64ras8J+VtCcnaSvRqD8k77K/KvCdkaIKDEIKwqk90ag44rasXgoMQgrwn5W0NmjgtoE9ChVCE+C0gCLgso8n8JG+sERjQPCdkrkKPUI7yLpRaUlg8J2LhvCel697bfCRvrB4SOGPuNGoJfCRsIHRqDIk8J65oT3hioxNY/CWqYnwn5W04K6QTFMKBEICwq8KDUIL8JGchWjCpS4mLCIKKkIoJfCSio5Bcj7gqIouP8KlJy5DJvChs4bgtI97JeK6ljlg8J6liOGEoQodQhvRqPCQlrQx8J64u8Kl8J+VtPCflbQkeu+svnAKL0ItWvCfgKjwkKe4JNywXOG8qSpj4LGdMnBbez0nWsOvReGqvvCeupPwkY2IS2snCitCKfCfp5vhjKc14b2baXou4La9bS0844GnTEAuPSLgqYdcIfCUkLTDtC1LCjdCNeC2myY+w5V7e1RW4LqVPSbhjIYl8JGKi29p4auJTy5z6p+5YPCeo47vv70w4LGdwqbhsplZCg9CDe+3j3LwnrmUTOGrhmAKI0IhKkPgr5cvSTvvuarhjobgrbNB4K2BPUc/w5zWjvCQrbtPCkNCQSTqqYlN4oGV77+94pGCe+GxoeCus+C/i8i6yLp38JCgvHYu4LOdXHsnVVpXXOCujsi64LGYaPCfop1G8J66k8KjCgxCCvCQjpAmJ/CeuqMKSwoEbmFtZRJDQkFDP/OghqXwkKmSLnPgoaIl8JGwml/wmr+7L2zwkKqR8J65gvCdkYdJ8Jarhkx1Pz/wkYy1KlzCuOCokC5Y4ou2PQoPCgluYW1lc3BhY2USAggECo0FugGJBQquBAoHY29sdW1ucxKiBLIBngQKKUIn0ahiPMOP8J2Tse+/veGFsTDwkLKWaOKBgPCWv7Hgtqrwnri74K2dCiBCHvCfpoZsyLrhj7nDiPCeuZTwn6S6JC7gt5LwkKu0aAoUQhLDsPCdlLF7JvCRpJXgt5TitKcKM0Ix8J65icKl4b2m8JCokMOWeuK2pSTwloSZJj8iQXdTyLoiIvCRjbLvv73wnrmf8J6xvgo9QjvwnoCkLuC6gnnIuuCxnXFdQPCfn4/gtYrgrLIk77+94KeLVPCRqJ8meOGdqj17KiXwn5W08JKJl11bXAoLQgnhg4fwnrmiJnAKAkIAChVCE/CbhZI84rWPKeKCmTonP/CRjp4KD0INOuCrhWDRqCRjInBeJQoEQgJifQoXQhU6RNGoJ+GkgCgqOnsm8JGOi+GKjXsKGEIW44SfXC478JC6g0zispgheWTwkLKofAoEQgJcLgofQh1ffPCRjZd7T/CflbTwkY65w5g/dlN777+94YqePwolQiPhpbBA8JGkvz9I76yTTS5F8J2SpmNpyLouNCrhjYUyPyY4QQovQi3wn5W0VSPwn5W0VT1t8JGMg8i6Ji7wkZGfJj/huLQv77uJfiXwkbyFSPCQlpQKB0IFYDwvJSQKG0IZ4aK/15TgrYclYEDwn6uWJ82/J86G4L+OJQouQiwqe/CRhLLIuvCepZJha/CQq4d7MyQ6YCTwnoqm8JCuqfCRg7lDOuC2vcKlewpFCgRuYW1lEj1CO0vwn5W0ITzgrZd74LeYavCeuZkw77+94LGdw50yJ2M4dUFg8J+VtCYqfWZc8KuGqeCtiOCqkMi6StGoCg8KCW5hbWVzcGFjZRICCAQKLQoKdXBkYXRlZF9hdBIfugEcChoKBm1pbGxpcxIQwgENCgsBF5kTJkCUAGIQHA== +ClYKVLoBUQozCgNrZXkSLLoBKQonCgVzaGFyZBIeQhx9w57it4he8JCNsvCdkp8rLsKl8J+VtPCRgoAlChoKBGtpbmQSEkIQVW5maW5hbGl6ZWRTaGFyZA== +CmsKaboBZgoVCgRraW5kEg1CC1R4bldhbFNoYXJkCk0KBXZhbHVlEkS6AUEKPwoFc2hhcmQSNkI0Li/DleCuoyo9PH7wlrmD8JG9g/Cfn7BK8JGMneC3mnpaLz0kwqXvrJYq8JGPguCwlD1MYA== +CqkBCqYBugGiAQpfCgNrZXkSWLoBVQokCgRuYW1lEhxCGuGli/Cfq5hUKkMlw5JgIjN18JC7vyjwkY67Ci0KCnJlcGxpY2FfaWQSH7oBHAoaCgZTeXN0ZW0SEMIBDQoLAQEpZ4JQWGI5N2wKJAoEa2luZBIcQhpSZXBsaWNhU3lzdGVtQ29uZmlndXJhdGlvbgoZCgV2YWx1ZRIQugENCgsKBXZhbHVlEgJCAA== +Ct4BCtsBugHXAQpwCgNrZXkSaboBZgo2CgRuYW1lEi5CLOGmvmAvJeG/o+Gyl/CeuKLguoTguq848JGPhTd08JGZoTvwkbSE4Z+3XmBgCiwKCnJlcGxpY2FfaWQSHroBGwoZCgZTeXN0ZW0SD8IBDAoKY1mDUnFAV5SZLAokCgRraW5kEhxCGlJlcGxpY2FTeXN0ZW1Db25maWd1cmF0aW9uCj0KBXZhbHVlEjS6ATEKLwoFdmFsdWUSJkIk4ZKVb+CunOGmvmvwn5u7VeChtj1BNS/grK3RqMKlwqU84Z+l +CqABCp0BugGZAQoxCgNrZXkSKroBJwolCgJpZBIfugEcChoKBlN5c3RlbRIQwgENCgsBNgljd3MpWUCZPAoSCgRraW5kEgpCCFJvbGVBdXRoClAKBXZhbHVlEke6AUQKEwoNcGFzc3dvcmRfaGFzaBICCAQKLQoKdXBkYXRlZF9hdBIfugEcChoKBm1pbGxpcxIQwgENCgsBEwZGF5eSOQiILA== +Cl4KXLoBWQo7CgNrZXkSNLoBMQovCgVzaGFyZBImQiTIuuChljrwn6CF4Yqz4YmaSsOhVUDwn6Cp4KiP4Z+40ajhm5MKGgoEa2luZBISQhBVbmZpbmFsaXplZFNoYXJk +CuANCt0NugHZDQowCgNrZXkSKboBJgokCgJpZBIeugEbChkKBlN5c3RlbRIPwgEMCgoCdoNRApF1dCNsChgKBGtpbmQSEEIOQ2x1c3RlclJlcGxpY2EKig0KBXZhbHVlEoANugH8DAosCgpjbHVzdGVyX2lkEh66ARsKGQoGU3lzdGVtEg/CAQwKCllzFCllkEJSJBwK3wsKBmNvbmZpZxLUC7oB0AsKHQoXYXJyYW5nZW1lbnRfY29tcHJlc3Npb24SAggDCsoKCghsb2NhdGlvbhK9CroBuQoKtgoKCVVubWFuYWdlZBKoCroBpAoK8wkKEGNvbXB1dGVjdGxfYWRkcnMS3gmyAdoJCh5CHC/Iuu+/vSXCpeC6iljwkYSkM/CbhaTdgHfgqooKFUIT8JCVuvCego/wn5W0WPCRvJzDgAoeQhzwkICNwqXwnrqlP0YuUXLwkIytPD9SOPCQhL5JCjtCOT3vv71h8JGOsWJcLz3wkYen8J2GsMKlSyZv8J28pz1cOu2eu9Go77+98J+VtPCRqJ884Ka4L+CpmwogQh7wn5W0JVThiZhU8JGAhmouJVgtTCbwn52EPSQuIl0KQEI+yLomV1FjXHde8J+VtMi6JVzwnrmH8KuepCLvv706Int58J+VtPCfo4HwkYy4QPCRipIiLlx78JGvlSrvv5YKKEImw6UqJvCRhoTgrpzwn5W0ZvCeuYLhiZg24L6U8JCohvCfrK7hjpkKOUI3JDkqLuCrp/Cfq5/wkLOWzofvv71pPF88MCLwkaakMO+svmzIuvCXhpo9wrjwnrSVUidgYeGqqAomQiThsa5E8Ja5rSDwkY6AJuqlsU5F8J2VhvCfq4ZgX3Qs8Juxu1wKMkIw8JCggy4lOPCeuZ0577+9JXrigZAiyLpgJ/CforAmQ0ko0agn77moUeCovNGoNz9NCjRCMvCfg4vwnbyOyLrwkbWUODxnYMKl4Y+X8J6ft/CQgYoiwqUq4K2cI+CvkO+svC/wn5W0Ci9CLT800ajCpfCRjIbtn5k/eOqplmFpS+G/u+Cphz0xP8KlVic/8J64pCo/8JColQopQidtIvCRjZfwnoWOPSY/7Z6z4Kar8J+BjtGoXUd1WzrguplF8J+fsFoKBUIDXi90CiNCIdGoe+CogT97QSLgqp0uMiU98JGwlD/hpZzakfCRioM9XAo5QjfwnZK78J2UtTcv4KiP4aCF8J64slrwkLy08Japp/CfoIDwl4Kp4ris8JCgiOGLgyXwkbWYbFJgCjhCNiQ6IlYh4Z2wS1zwkaS4yLov4KiDPy57PPCQoLzCpfCQto57TvCRpLfIui/wnrmdJntO4LqfNAoKQgg1ZfCQlpk0TwokQiLwkKS/WWDqpaDwkYyy8JCAuvCRh5k68J65rfCRk5LwnrqhCkBCPuC3ij0n4LueJj/wn56lP8Kl8JGKiHsl0agn4aKKMPCQlqM/15/wn4ShPHjvv71g4LK10ajwnri5YGQob8i6CjRCMvCWqZXwkL+lMlbgp58+PW7itKfhvZ084Ki277uB4K6aw4808J65mzxSInfvv7184LeyCjxCOvCdmYo78JGTkirvv73wrrGc8J6fsCTwkJasVWJQSSTgtZTgqZwu4bCY4K2nPeCxo/Ceub7CpfCRvrAKMUIvLsK58JCplm/wn5W0cD0k8JG/sCVNNSXwnoSXKOGmvuGihOKRifCdjbDwn5W0WEgKGUIXw7dbyLoyIjs68JGkieGsmls6OuKDgHsKC0IJduGzhj3qoLVkCghCBi7wkKiWMAoWQhTwlqmAe1xx4LGLajR0Untc0ajRqAoiQiDwkL2wJSd34LOv8JuygmdKJCfhs5I9JvCegIjgsYsheAoWQhQqRsO/4aqy8J+hlz3grJDwnZS9JwooQibgqI/wkKCD8JCEgUAlLzomMPCeuY974a6Teibvv714UPCQjLQuSAohQh8lLlDwkY+YL+GLkNGo8J2VhvCeuKRFLPCRjYg6dcKlCiwKEHN0b3JhZ2VjdGxfYWRkcnMSGLIBFQoTQhE88J+qhmZJY+G9mSXwn5W0IgpiCgdsb2dnaW5nEle6AVQKPwoIaW50ZXJ2YWwSM7oBMAoUCgVuYW5vcxILwgEICgYCZyhBhCwKGAoEc2VjcxIQwgENCgsBVoJlYWSRcWYFjAoRCgtsb2dfbG9nZ2luZxICCAMKOQoEbmFtZRIxQi8n0agnbcKl8KudrvCfpI/gv4ts0ajwnYuT8JarnvCfoak8XCZ+WOC7gfCflbQkdgovCghvd25lcl9pZBIjugEgCh4KClByZWRlZmluZWQSEMIBDQoLATGROXeBlkUiFhw= +CooCCocCugGDAgp4CgNrZXkScboBbgo0CgpjbHVzdGVyX2lkEia6ASMKIQoEVXNlchIZwgEWCglAlYlEckAgZJwQ////////////AQo2CgRuYW1lEi5CLNWQ8JGMs+qctyIk8JuwlDLigbF48J6fpeCstci6fldcdiXwkbS6w7ww4LqZCikKBGtpbmQSIUIfQ2x1c3RlckludHJvc3BlY3Rpb25Tb3VyY2VJbmRleApcCgV2YWx1ZRJTugFQCh0KCmNhdGFsb2dfaWQSD8IBDAoKQlc3gyiJQ1hTLAocCglnbG9iYWxfaWQSD8IBDAoKmAVSYpBAKTEJLAoRCgNvaWQSCsIBBwoFMUBpBHw= +CqMBCqABugGcAQo0CgNrZXkSLboBKgooCgJpZBIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKRGR5U3aSlihoHAoSCgRraW5kEgpCCFJvbGVBdXRoClAKBXZhbHVlEke6AUQKEwoNcGFzc3dvcmRfaGFzaBICCAQKLQoKdXBkYXRlZF9hdBIfugEcChoKBm1pbGxpcxIQwgENCgsBNEBRcpM5GZIDnA== +CoACCv0BugH5AQqTAQoDa2V5EosBugGHAQpWCgRuYW1lEk5CTPCflbQkPOCtnGDwkYOcb/CeoJvwnZS8evCQo7DwkKiG8JGkjifRqOC0kHJEO/CRlrXwnbyo8JGXgSA8L+GdrknDpPCQpInwn4SFbT8KLQoKcmVwbGljYV9pZBIfugEcChoKBlN5c3RlbRIQwgENCgsBYyMzkXdiQTNojAokCgRraW5kEhxCGlJlcGxpY2FTeXN0ZW1Db25maWd1cmF0aW9uCjsKBXZhbHVlEjK6AS8KLQoFdmFsdWUSJEIiL3cq8JC+snAr8JGkvH3wm4Wn8J65ncKzKtGoYTMiNzwyOA== +CrkCCrYCugGyAgrUAQoDa2V5EswBugHIAQosCgtkYXRhYmFzZV9pZBIdugEaChgKBFVzZXISEMIBDQoLASNUCBRwljV5ZjwKKAoHZ3JhbnRlZRIdugEaChgKBFVzZXISEMIBDQoLAVZUhpSAc5hogywKFQoLb2JqZWN0X3R5cGUSBsIBAwoBDAoqCgdyb2xlX2lkEh+6ARwKGgoGU3lzdGVtEhDCAQ0KCwEzYYIXYkNmc4Y8CisKCXNjaGVtYV9pZBIeugEbChkKBlN5c3RlbRIPwgEMCgpZNkRzB0R5USR8ChsKBGtpbmQSE0IRRGVmYXVsdFByaXZpbGVnZXMKPAoFdmFsdWUSM7oBMAouCgpwcml2aWxlZ2VzEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKQmRYIhQphCiJbA== +CogCCoUCugGBAgqEAQoDa2V5En26AXoKLQoLb2JqZWN0X25hbWUSHkIc8JGOi+Cpm/CRh7HwnZKee9Go77+96p+bTyjCpQoVCgtvYmplY3RfdHlwZRIGwgEDCgFcCjIKC3NjaGVtYV9uYW1lEiNCIdGo8JGNn+GqhOCjjeC2uSfwkZmm8J+guWvgsYZvJuGfsAoUCgRraW5kEgxCCkdpZE1hcHBpbmcKYgoFdmFsdWUSWboBVgoeCgpjYXRhbG9nX2lkEhDCAQ0KCwGCGJcHhpiWJ3WMChUKC2ZpbmdlcnByaW50EgZCBOCpmS0KHQoJZ2xvYmFsX2lkEhDCAQ0KCwEyFzOSZ2BiFlls +Cog/CoU/ugGBPwoxCgNrZXkSKroBJwolCgJpZBIfugEcChoKBlN5c3RlbRIQwgENCgsBAHWUI1BXJIWSjAoRCgRraW5kEglCB0NsdXN0ZXIKuD4KBXZhbHVlEq4+ugGqPgo7CgZjb25maWcSMboBLgoWCgd2YXJpYW50EgtCCVVubWFuYWdlZAoUCg53b3JrbG9hZF9jbGFzcxICCAQKLQoEbmFtZRIlQiM84Y+64KyBIirwkLyB8J+bo+CpkfCQloN7WHU6Py/gqrMqJAouCghvd25lcl9pZBIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKN0SThxMZF0eJLAqLPQoKcHJpdmlsZWdlcxL8PLIB+DwKmAG6AZQBCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKhZRllpZoEkRYLAo0CgdncmFudGVlEim6ASYKJAoGU3lzdGVtEhrCARcKChEESQmCJ5YwgRwQ////////////AQouCgdncmFudG9yEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBNBQwkCEgcRmQPAqIAboBhAEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgpgdhAlBlSWWAJsCioKB2dyYW50ZWUSH7oBHAoaCgZTeXN0ZW0SEMIBDQoLAQIDaAUwMmhxB1wKKAoHZ3JhbnRvchIdugEaChgKBFVzZXISEMIBDQoLASMiUglmNiYhQnwKcboBbgosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCmGHeUEGk4kjcnwKEwoHZ3JhbnRlZRIIQgZQdWJsaWMKKQoHZ3JhbnRvchIeugEbChkKBlN5c3RlbRIPwgEMCgpSZZdkNyWRGIlcCocBugGDAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCpcBKYIHkTV0OTwKKAoHZ3JhbnRlZRIdugEaChgKBFVzZXISEMIBDQoLAYFBiHQAFFCANEwKKQoHZ3JhbnRvchIeugEbChkKBlN5c3RlbRIPwgEMCgp3JHc0R4RjSTIcCoYBugGCAQotCghhY2xfbW9kZRIhugEeChwKCGJpdGZsYWdzEhDCAQ0KCwFAUGOTchaIMhYcCigKB2dyYW50ZWUSHboBGgoYCgRVc2VyEhDCAQ0KCwFVCXEEYkNHYyVcCicKB2dyYW50b3ISHLoBGQoXCgRVc2VyEg/CAQwKCkiTlmAmFTVBMGwKjAG6AYgBCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLAXNTRTBZQkGBJ5wKKAoHZ3JhbnRlZRIdugEaChgKBFVzZXISEMIBDQoLAWeIkBlhYDCCd1wKLQoHZ3JhbnRvchIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKU3UhlTMhUkMljApzugFwCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLATCXERSZGJc3QYwKKgoHZ3JhbnRlZRIfugEcChoKBlN5c3RlbRIQwgENCgsBYXd0kZFEc2YhXAoTCgdncmFudG9yEghCBlB1YmxpYwqLAboBhwEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBAZIkmCYmdWMlHAonCgdncmFudGVlEhy6ARkKFwoEVXNlchIPwgEMCgoyl3RFgYVjkRMsCi0KB2dyYW50b3ISIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCnKFNxMmWVgTSYwKcroBbwotCghhY2xfbW9kZRIhugEeChwKCGJpdGZsYWdzEhDCAQ0KCwFUUzZwMpQThACMChMKB2dyYW50ZWUSCEIGUHVibGljCikKB2dyYW50b3ISHroBGwoZCgZTeXN0ZW0SD8IBDAoKeAkXl5cChZhynAqKAboBhgEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBNVFwWUKAA4QpjAotCgdncmFudGVlEiK6AR8KHQoKUHJlZGVmaW5lZBIPwgEMCgonQlmIWFh4gWVMCiYKB2dyYW50b3ISG7oBGAoWCgRVc2VyEg7CAQsKCWl5eCYXkAkmbAqAAboBfQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCpZTGZUIBAWRdCwKOAoHZ3JhbnRlZRItugEqCigKClByZWRlZmluZWQSGsIBFwoKCWKJaZdxdBEpbBD///////////8BChMKB2dyYW50b3ISCEIGUHVibGljCnO6AXAKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBFVZRMyZnd5JzLAoTCgdncmFudGVlEghCBlB1YmxpYwoqCgdncmFudG9yEh+6ARwKGgoGU3lzdGVtEhDCAQ0KCwE4g3R2iSBmFFQ8CpsBugGXAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCiIjUoJSEIZSkEwKLQoHZ3JhbnRlZRIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKlYMzCJB4iEKCLAo4CgdncmFudG9yEi26ASoKKAoKUHJlZGVmaW5lZBIawgEXCgoTMidiYjYZgjA8EP///////////wEKgQG6AX4KLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBZ4kDkIiRl5hyPAoTCgdncmFudGVlEghCBlB1YmxpYwo4CgdncmFudG9yEi26ASoKKAoKUHJlZGVmaW5lZBIawgEXCgoDBDBJcwgBZId8EP///////////wEKb7oBbAosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCjBFSGdEQWhTGRwKEwoHZ3JhbnRlZRIIQgZQdWJsaWMKJwoHZ3JhbnRvchIcugEZChcKBFVzZXISD8IBDAoKYIYhRBNwJSiGPApwugFtCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLAWYUdwQ2iCJxRlwKEwoHZ3JhbnRlZRIIQgZQdWJsaWMKJwoHZ3JhbnRvchIcugEZChcKBFVzZXISD8IBDAoKkyIkaBJ4BjNwLAqFAboBgQEKNgoIYWNsX21vZGUSKroBJwolCghiaXRmbGFncxIZwgEWCgmYaUASdoAEWGwQ/v//////////AQoTCgdncmFudGVlEghCBlB1YmxpYwoyCgdncmFudG9yEie6ASQKIgoEVXNlchIawgEXCgoSUFhWEINQNnhcEP///////////wEKlAG6AZABCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLAQc3hkhxJYIiNVwKKQoHZ3JhbnRlZRIeugEbChkKBlN5c3RlbRIPwgEMCgpyIikXU1MhiSRsCjQKB2dyYW50b3ISKboBJgokCgZTeXN0ZW0SGsIBFwoKExBzkXiTKSUGfBD///////////8BCnK6AW8KLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBcxUUKXKUhSMZLAoTCgdncmFudGVlEghCBlB1YmxpYwopCgdncmFudG9yEh66ARsKGQoGU3lzdGVtEg/CAQwKClIVFlRRUjQVV1wKkgG6AY4BCjcKCGFjbF9tb2RlEiu6ASgKJgoIYml0ZmxhZ3MSGsIBFwoKByEjlCRJKAdgXBD///////////8BCigKB2dyYW50ZWUSHboBGgoYCgRVc2VyEhDCAQ0KCwE0KCiDd2R0FXeMCikKB2dyYW50b3ISHroBGwoZCgZTeXN0ZW0SD8IBDAoKMEdBhRNXBIWWjAqHAboBgwEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgqEcFUoBXmDdHI8CioKB2dyYW50ZWUSH7oBHAoaCgZTeXN0ZW0SEMIBDQoLAVlyERkgdzF4WBwKJwoHZ3JhbnRvchIcugEZChcKBFVzZXISD8IBDAoKJxEzBwGTJUUmnAqRAboBjQEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBInNHcpWEYlgJnAotCgdncmFudGVlEiK6AR8KHQoKUHJlZGVmaW5lZBIPwgEMCgpSQRRYVIUmmSGMCi0KB2dyYW50b3ISIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCgJmdEUQR0k3KUwKcboBbgosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCplmiHQxU5CUU1wKEwoHZ3JhbnRlZRIIQgZQdWJsaWMKKQoHZ3JhbnRvchIeugEbChkKBlN5c3RlbRIPwgEMCgpiQoKCAoQ4EGgcCpIBugGOAQotCghhY2xfbW9kZRIhugEeChwKCGJpdGZsYWdzEhDCAQ0KCwEUCEZJZmATJ2ksCi4KB2dyYW50ZWUSI7oBIAoeCgpQcmVkZWZpbmVkEhDCAQ0KCwF0gyKHdpdRaSRsCi0KB2dyYW50b3ISIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCnOUAAEFiGSRSBwKjwG6AYsBCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLAQBTd0Q0hJcxJ2wKKgoHZ3JhbnRlZRIfugEcChoKBlN5c3RlbRIQwgENCgsBGCkiMVFCOGFYTAouCgdncmFudG9yEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBFyQAMjiIQTkEnAqTAboBjwEKNwoIYWNsX21vZGUSK7oBKAomCghiaXRmbGFncxIawgEXCgoEcIhGRpJRGJdcEP///////////wEKKgoHZ3JhbnRlZRIfugEcChoKBlN5c3RlbRIQwgENCgsBFpFJISiXR5gzbAooCgdncmFudG9yEh26ARoKGAoEVXNlchIQwgENCgsBdReEJ1OFgEiVnAqSAboBjgEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBATR2hggXhzQAfAotCgdncmFudGVlEiK6AR8KHQoKUHJlZGVmaW5lZBIPwgEMCgowOHUWhHgRERGcCi4KB2dyYW50b3ISI7oBIAoeCgpQcmVkZWZpbmVkEhDCAQ0KCwFFYWYkODg1aQmcCnC6AW0KLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgqFOIWRNWmBlVYsCigKB2dyYW50ZWUSHboBGgoYCgRVc2VyEhDCAQ0KCwFVWYc3VHN0NYZMChMKB2dyYW50b3ISCEIGUHVibGljCoABugF9CjcKCGFjbF9tb2RlEiu6ASgKJgoIYml0ZmxhZ3MSGsIBFwoKFYJEU2EHY3ATTBD///////////8BChMKB2dyYW50ZWUSCEIGUHVibGljCi0KB2dyYW50b3ISIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCoNVZVc3WUdkY3wKjAG6AYgBCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKM1MmhCSYU1hFfAopCgdncmFudGVlEh66ARsKGQoGU3lzdGVtEg/CAQwKCoYpMDeHCJcQEowKLQoHZ3JhbnRvchIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKZCRBFiQwMXAFfAp2ugFzCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKBHFIIGIkloZwfAoTCgdncmFudGVlEghCBlB1YmxpYwouCgdncmFudG9yEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBVAR1F5EJlFhyjAp2ugFzCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKllWDBieIKVJoHAouCgdncmFudGVlEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBJTmBQiAnEECVbAoTCgdncmFudG9yEghCBlB1YmxpYwp8ugF5CiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKApE0lpJgEJaXLAoTCgdncmFudGVlEghCBlB1YmxpYwo0CgdncmFudG9yEim6ASYKJAoGU3lzdGVtEhrCARcKChByMZhGNEkmUSwQ////////////AQqRAboBjQEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgpAlECChohlZTN8Ci4KB2dyYW50ZWUSI7oBIAoeCgpQcmVkZWZpbmVkEhDCAQ0KCwFIIVUCCWcwhRIcCi0KB2dyYW50b3ISIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCoSEN0WHUjhjIDwKiQG6AYUBCi0KCGFjbF9tb2RlEiG6AR4KHAoIYml0ZmxhZ3MSEMIBDQoLATExZoYZaHMFZiwKKQoHZ3JhbnRlZRIeugEbChkKBlN5c3RlbRIPwgEMCgoyCJVkSIInIiIcCikKB2dyYW50b3ISHroBGwoZCgZTeXN0ZW0SD8IBDAoKZFZDhSYgSWZgHAqGAboBggEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgpmZIY0FyMyJzdsCicKB2dyYW50ZWUSHLoBGQoXCgRVc2VyEg/CAQwKCkVTKUlXIgKBkRwKKQoHZ3JhbnRvchIeugEbChkKBlN5c3RlbRIPwgEMCgoJlomZhFKGNERMCna6AXMKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgoXcwgWYBgZJgA8Ci4KB2dyYW50ZWUSI7oBIAoeCgpQcmVkZWZpbmVkEhDCAQ0KCwE5ljSRFkWHlxdcChMKB2dyYW50b3ISCEIGUHVibGljCna6AXMKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgoIV4mSBQSQFECcCi4KB2dyYW50ZWUSI7oBIAoeCgpQcmVkZWZpbmVkEhDCAQ0KCwESSGZFM3NUNohMChMKB2dyYW50b3ISCEIGUHVibGljCocBugGDAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCokGVjWQaTSQJHwKKQoHZ3JhbnRlZRIeugEbChkKBlN5c3RlbRIPwgEMCgo0QlmENVRmiQicCigKB2dyYW50b3ISHboBGgoYCgRVc2VyEhDCAQ0KCwGEFIiFiXRTVSUcCoQBugGAAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKChRoNECXgJhGhEwKJwoHZ3JhbnRlZRIcugEZChcKBFVzZXISD8IBDAoKgpQgkiKIAmcTbAonCgdncmFudG9yEhy6ARkKFwoEVXNlchIPwgEMCgpFeAGJFSFJdYQsCpEBugGNAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCnMBWHgYKEVHNTwKLQoHZ3JhbnRlZRIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKOEdkIjA0MmRgnAouCgdncmFudG9yEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBdkBBY5Ykd5JnfAp1ugFyCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKaBcIcFZSNQeXLAotCgdncmFudGVlEiK6AR8KHQoKUHJlZGVmaW5lZBIPwgEMCgpzQpUDRHIoFxaMChMKB2dyYW50b3ISCEIGUHVibGljCnK6AW8KLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgoCGJgQmYIiMUl8ChMKB2dyYW50ZWUSCEIGUHVibGljCioKB2dyYW50b3ISH7oBHAoaCgZTeXN0ZW0SEMIBDQoLASNSUCRhRHM1KHwKcroBbwosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCnAQmDRmOJiTIzwKKgoHZ3JhbnRlZRIfugEcChoKBlN5c3RlbRIQwgENCgsBFSNneXRjeSVYfAoTCgdncmFudG9yEghCBlB1YmxpYwpyugFvCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKhxY1OIZZcoF4nAoqCgdncmFudGVlEh+6ARwKGgoGU3lzdGVtEhDCAQ0KCwEZZWESFAhokoEsChMKB2dyYW50b3ISCEIGUHVibGljCo4BugGKAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCpkIFyQikpRGgHwKLgoHZ3JhbnRlZRIjugEgCh4KClByZWRlZmluZWQSEMIBDQoLAREZcyQHaFUBUZwKKgoHZ3JhbnRvchIfugEcChoKBlN5c3RlbRIQwgENCgsBBUgHIAGGhlCIjAqNAboBiQEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBcDYDQQAwYhZ2nAopCgdncmFudGVlEh66ARsKGQoGU3lzdGVtEg/CAQwKClNFRwGAlzGZUWwKLQoHZ3JhbnRvchIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKWCGUhlMHEhI0PAqMAboBiAEKLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBaIV1gmiIYFJVTAouCgdncmFudGVlEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBSCIFQzeGhmZ5jAonCgdncmFudG9yEhy6ARkKFwoEVXNlchIPwgEMCgqXBHORZXKGOQEcCnC6AW0KLQoIYWNsX21vZGUSIboBHgocCghiaXRmbGFncxIQwgENCgsBRHEyRWQxY2WXbAoTCgdncmFudGVlEghCBlB1YmxpYwonCgdncmFudG9yEhy6ARkKFwoEVXNlchIPwgEMCgooGEYUJnVWFWGcCnW6AXIKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgphISUihJmHF5FcCi0KB2dyYW50ZWUSIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKCpNlA4N0YHVTlRwKEwoHZ3JhbnRvchIIQgZQdWJsaWMKcroBbwotCghhY2xfbW9kZRIhugEeChwKCGJpdGZsYWdzEhDCAQ0KCwEhNhEWMVGVkClsChMKB2dyYW50ZWUSCEIGUHVibGljCikKB2dyYW50b3ISHroBGwoZCgZTeXN0ZW0SD8IBDAoKKYmVMGkxYYFYnAqNAboBiQEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgpTdWFllCgWNyZMCikKB2dyYW50ZWUSHroBGwoZCgZTeXN0ZW0SD8IBDAoKmZlAkBZ2IyZSTAouCgdncmFudG9yEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBF5iYgwhUQmlkTApwugFtCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKgygHQGEVFwGCnAooCgdncmFudGVlEh26ARoKGAoEVXNlchIQwgENCgsBaZhQABEBNUCYLAoTCgdncmFudG9yEghCBlB1YmxpYwpxugFuCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKI5EpdHl3eAOJbAoTCgdncmFudGVlEghCBlB1YmxpYwopCgdncmFudG9yEh66ARsKGQoGU3lzdGVtEg/CAQwKCgk1BTV0RDEodxwKcboBbgotCghhY2xfbW9kZRIhugEeChwKCGJpdGZsYWdzEhDCAQ0KCwFCGHkpgjNDdzJ8ChMKB2dyYW50ZWUSCEIGUHVibGljCigKB2dyYW50b3ISHboBGgoYCgRVc2VyEhDCAQ0KCwFmhpMQd0MimRIsCowBugGIAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCpNEMgQ4eUMRkowKKAoHZ3JhbnRlZRIdugEaChgKBFVzZXISEMIBDQoLATVwkpFokncxk3wKLgoHZ3JhbnRvchIjugEgCh4KClByZWRlZmluZWQSEMIBDQoLAXcoNgQYdFQjlEwKhAG6AYABCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKICABCRBBQBiSjAonCgdncmFudGVlEhy6ARkKFwoEVXNlchIPwgEMCgonhREBiUQniRGcCicKB2dyYW50b3ISHLoBGQoXCgRVc2VyEg/CAQwKCgkWZGeJVJWDVhwKjAG6AYgBCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKOTeGAUkzIhkijAouCgdncmFudGVlEiO6ASAKHgoKUHJlZGVmaW5lZBIQwgENCgsBWUODkFVEQYViPAooCgdncmFudG9yEh26ARoKGAoEVXNlchIQwgENCgsBOSV0CTQGMIBxfAqRAboBjQEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgpjQEhBd3JoJUAcCi0KB2dyYW50ZWUSIroBHwodCgpQcmVkZWZpbmVkEg/CAQwKChIyR0gXJFVScpwKLgoHZ3JhbnRvchIjugEgCh4KClByZWRlZmluZWQSEMIBDQoLATFZGZhlBgZ0UIw= +CpqEBgqWhAa6AZGEBgpGCgNrZXkSP7oBPAo6CgZzb3VyY2USMLoBLQorChhJbnRyb3NwZWN0aW9uU291cmNlSW5kZXgSD8IBDAoKmBZnYHMGWWIpbAoaCgRraW5kEhJCEFNvdXJjZVJlZmVyZW5jZXMKqYMGCgV2YWx1ZRKegwa6AZmDBgrmggYKCnJlZmVyZW5jZXMS1oIGsgHRggYKkBG6AYwRCuEQCgdjb2x1bW5zEtUQsgHREAoIQgZrKfCdkqoKBEICwqUKL0It6qiEP/CQoq/wkLuCezQ9PfOghL7iro0qwqVdJe+xm++5lGA6NifwkYS2XUs/Ci1CKyTwkYyKJsK68JKUoPCYhp7wkL+o8JC6rCd+LyV9w7rwkJKp0ahL8JORjz8KK0IpUi7wkIaC8JGPgl4lLuqrpuGlgFl88J2DgGpo44Gl77+9KvCeuYdcVyMKAkIACiBCHlwk8J6yhvCdlYbwnoCn8Jy8u2Dwnouj4oOn4YqLXQoiQiDwn5W0Sj86wqV+LTjgqZ404LSQ8JGCvvCRg6Vc8JGXkAosQirDj8K6L9Go8JCjsGAv8JG7tvCfgqdOImB8P214Ly464LGE8J2Sn1MwKlQKQkJAP1ZE8JCgiPCQtLDwkL+x8J+VtPCRj5XgrZcvJSngq6JpLmAvQycwbFwv4KaI4Yq78Jy3tm464Kay8J67se+/vQoGQgQ/P3tRCjhCNuCzg3vhpas/8JuDs/Cfm7EnbfCdlJfcouKtuzvwkJa88JGQoOqpky99OiLDqC8v76yDJ2VjXwo1QjN6QT8xdjzgupTgrKx38JapjCTwn5W0JFpYP2jvv70n4Kqt0ajkkJbwkbGBMTpa8JCtkzcKKkIo8JuFkvCWqYQ/8JGYvT9cb/CflbQlPScv8JGwhFnqr7nwkJaS8JGvigoGQgRUPSRBChRCEu2evvCRg7LwkKmUwqXvv73RqAogQh434rWw8J65sXtaOVzgsIg/wqQm8Jq/vuKChfCWtZAKMEIu8JGcs/Ceub7wkZua8JuyhDwo8J6EvGF7Iinwn5W08KmOsyEk4Z2w4oGw8JGkggoCQgAKHkIc0ajwkZyfUmBcJD97XFfwn5y/ZvCeuKEo4LOVSAoNQgs6R+CziHnhiptaJgofQh3hi6k6wqXRqGvvrJYv8JCTieK2j3slOm/vv71gQwowQi4mL+GMksi6Ii3gqJZg8J2Epu+/vVwkOtGL8JC9vlInccOP8J+VtPCflbQiNyUnCjNCMTwv8JGshT8n77+98JCplCJM4La9XD9c77+94YuMJS7vrIHCpUzwkI+MXHJjZfCRpIkKIUIf4L+YI8i6SlzwkL2LyLolZCbRqOCzoy7wnoCcXOC3gApPQk1FwqUu8JCjsU7wkKi4JMi68J+ruPCik6zwkZuDJSLwn6G28JGymOC2qFzgs4bDs/CQlL9cZdGo4ruxPeK0re+/vWDwkY+C4Z2lV+CpqAosQipn8J+ulignUDwmez8/44OdYPCfhYvwn5W0YOCmtnzwnZK0QfCflbTvrJUKGEIW77+977+98J2UmcKlXCd98J65otGoZAoxQi/CpfCRjo7OjNGo8J2Uvl/wnpOZ8JChhOCnl+CujiRZJD9m8JGMhz1nPkwgL2RgQQogQh7hvZJsLzQ6ZuGKsiLRqFwmOcKl4K6cLkrNu8KramAKEkIQJOCzgPCRtqhMXPCRo7/WjQosQirwkKCI4KmawqUw4KuML+KAg2ThrIHgu4HhsaskM9GoXPCbhLJrOfCegJsKCEIG44WHeyV2CgdCBSbwnruxCg1CC9iR8J6Ls+GksmBbCiNCISfRqC4i4reNZvCepZXgtY9hKnvgsoFgQOC3m/CQhorCoQosQip4TPCdlZDvv67wn4izw6LRqPCQhbNgfvCflbTCpVLwnriByLp8wqUqw5cKNEIyM3vvv73DoS7wm4qV8JCBjcOiIsKl8JuEhjY98JCCsvCehLA2JEQh4reF0ajwmKqWwrQKQkJA8JCAtSZgJ0Hwn6+K8J65mSVgPfCRtKYq8JCHnGovdfCWq7TvuLvRqErgurYnJ+Gnv+CuseGlse+/veCjjFzCpQoTQhFB4K6c8J2dmFd6UiNb8JCmmwo6QjjwkZeNM/CRpqVF8JCBg+G/l++tgOGmufCWvZc6JPCvo4TDh0gtQkHqn5EmYCfhjpheMsK044CFWgocQhrwkICxe1zhnbPwn5W08J2TmC/wlrWDyLrRqAoCQgAKD0IN0ags8LCSgj3wkYyyPQoSQhBaKnvigpLwkKKsPeK1ryc8CkFCP+GJmDpM8J6Xn1DwkICHecKl8J64uSUiJcKo8JGPk2c+7725P/CeoJc94K2A0ajwnrm+0ajwn6K7XGDwkY+HPAo0QjLgtoFc8Ja5uvCQlZnhn6gn77+9cyfwnZWUTlPIujcuOvCflbQ+yLrgp6fhv7PwkJSTfgpCQkAryLrwnpebUuqltPCetIpRItGo0ajIuirgprJZOirRqDfwkZGh4Le08J66qfCWtZbgqZE/8JCtlE9wbOCotSQ/CgdCBSnwnrikCi1CK2NR4K+NW+K3lXbigbDGivCRm4Nv4K6k6qKbJiLwn5W08J+VtH4nLj1ayLoKOkI4XCVGYNGo8JG2kSUqdGPwkLCB8Ja9qMOQVuC6hPCeiprwkK2VOi4nJkDhuLc48J+VtMi60ahk0agKOEI28J+JoXHwkbGe8Jy8m++svF06JlxX8J6fqXtcInDqj6jguYTDneqpjV7vv73vrLnIuiXgv4oxCh9CHfCflbRw8JCojfCdlY3wn6uaOVzgprDwn5W0VWVECgVCA2c8fgoRQg/wnZKmP/Ccvb0mJfCQq6sKPkI877ePde+/j+K0uOG9m2PwkLOM8JGRnSUu8J66osO+yLo7wqXgsL/wkZGY8JCgqnA88J6ilSLwnoSB766ACg5CDHs9yLokQuGDsy5yLwoFQgMkzboKFEISJfCflbRXLns84KalPSTwlq2eCilCJ+KRg/CQoLdR0ahcIvCflbRH8J+ilG3grIPwn6qQPVtgw6/gpod7JwoFQgPgrLAKBUIDJ0g9ChUKBG5hbWUSDUILR++/vdGo1pNgOmUKDwoJbmFtZXNwYWNlEgIIBAqRAboBjQEKagoHY29sdW1ucxJfsgFcChFCD2HDnHs/ZyPCpT19LCUiPgokQiJr8JCTmnjwn5W0PDw/d/CflbQ/4LqEJsKl4KeO8J+VtDRoCiFCHz0n4aCG8J65nfCeuIFPYOqlsXYn8J6ln/CRkKFzIncKDgoEbmFtZRIGQgQu0ag8Cg8KCW5hbWVzcGFjZRICCAQK6Qi6AeUICqsICgdjb2x1bW5zEp8IsgGbCAoLQglC8J2SsfCbgJMKFEIS8JCGilbjgYnwnrmb4KaPYGxHChJCEPCQvYrwn6q14b2d4b2JXCYKJ0IlPfCQqovCvvCQq5gtOlDIumBY4Yyh76y7KuKFsjIm4LOV8J6TuQoxQi9g8JGNi1zwkY2XIvCWrZ7gqIUlIuCnsUk8OvCRpJbwn5W0aTbRqPCflbQ1JeGKugoWQhQp8J6foy5g4ZOES/CcvLvqoLVpJgo6Qjjgqongu4h0LvCRjo7wn6e1POCmj/CSv6JJIj3grZxt8JCEp0Nd8J2Sn/CRm4Ex8JGrpSbvuJd2KgpIQkbvubPwnYCwIsKl4KivP/Cen6Ve8JCrilw/4LOj4am2XPCQv6N7JzrwkY2e4Ki2YPCRtpXhjpY/YDrwkYCvLnbgt5LwnZK4CgVCA8i6JwokQiJmwrBc8JGvseKBn+2fovCfq6Pwn4KmIu+/hkRAPFfwn6uYCiJCICJfw7U/KPCeuKfwnrS78JGauC48Kzo/ONW+4KyQPWBtCiRCInLRqHIm8JG1gSpsJcKl4KeE8J+VtDrwkKmFOvCeubR3z6oKEEIOOkF777+94LOm4aCYc2oKLUIr77+aP3lsWeGinvCQrpvwr6eAXPCRlqDwn5W0wr7hv70l8JGXmybwnZGaJQoZQhcv4YqdKvCRjrt08JCWtnzwkY2pJU/Iugo+QjwtesK7J0Xwn5W08JGOjmXwkK28w7rhibjwkKe3NOGJkSJt4b+9IuK2vuC2t+C1sfCQloN8yLrCvC4rMScKGUIX8J64tifhs4QkYS4mXHXRqNew8JGKijwKHUIbYeCqpzwqb96xIV3wkZCU4K6zZDzwn5W0LtGoCgZCBHtcwrkKGEIW8JCsgS888Jy8omDqpYZ7czIvY++/vQorQilYKPCQjJMj4LCPQPCfiaJiYMKlPOK0p0TgpohA0ajgvYY/Jj/wn5+SJwoUQhLJnTx9OvCRjLnDpSZpeS9gXT8KREJCOuCtli/IuiU26qiB8JGMgW7wnZKpefCRjLI6wqUz8JG1pfCQlqlcNuCnl8KgOPCRpIkueiLgtI/wn6OAazUw762ECjJCMOC6pSRHOlvvv73wkY+YwqXwnrmf4KmeIlzhvKvhkqo9SVjwka+NXEbhqLV8b3ZSSgoUQhLwlq2pems88K+mgfCfoJkuM2AKBkIEI+qjkAoOQgzgu4I5PEY1NuCvgmAKOEI2J/Cfq5pgwqXDu/Cfn6XwnYutYTfwn5W0PSVA4Z6rLkYk6qyw4aq+LjTDri7hnJAuSvCQvYE9CgxCCuK0p+CzhvCQg5YKRkJE8J+diyLwnrmCYEThnazwnZKq4rWiIlHhi5LwkJOjwqXvv73vv73itrZg8JCjteC0v3sz8J6hifCflbRl4aCB4KizyLoKJAoEbmFtZRIcQhrCpeCnoci677+9ROCrrHBkw43vv71e4b2bOgoPCgluYW1lc3BhY2USAggECsMKugG/CgrfCQoHY29sdW1ucxLTCbIBzwkKLkIsw6w8a+GDhy5sQPCen6hf77+9QWA/8JC1nUU777+9RuCpkWDwn4OiwqUpI2AKHEIa8J+VtOGKs2EnZihHOuC2puC/kMKlwqUnJCoKKUIn4b2bYXjwkIyBWXHwkK2Z8JCyrSrwm7KfXFEn8J+VtG8/dT1TJSVpCi1CKz0/8JOJscK/4auFdW9F8JCThTw/4YmWKu+wtfCQoKTCpSfqrIJhfVjWjzoKKkIoPS9myLoqL1ox8JColuqohfCRpr/wn4es8J66rMi677+98JCroOCmjwo4Qjbgu5LRqD1VPcKl4LOdYHgm4aWn8JChkcOO4KmCJlTqn4HwkYy/L/CRg5MnNuK3mvCflbTRqCIKP0I9SSZc0ajwkYK+Lj3vv71w8JGMt3s98JG0gPCdkYvgt6tI8JGggDzgsZ1dYGDwkIStw74i4Y6UQlZg0ahgYAoiQiBp8JCrsy9bWko64LaC76yWw5ZRdfCQkqHwnoCd8KyCrAowQi5n8JaEmPCRpLdY1qYiLyo/JvCepZLCpVcqLybwkKiF8JGDgXwm8JC/rjXvv71uChlCF1/gp50lOkl7KyA/JS7wlqu1IinDjMK4CidCJS/wm4WV4KuN4LOgb2dvPXsw8JGArOCgtFBEMuGglGDhv77hooUKJkIk76yUPG17w7rwk7yU8JGcol8iPy4lI1Jg8J65t+C3qfCQtb4vCjNCMU9l4b+nLuGwivCRl5Pgqbbhg4fCuvCQlpAmwqXgp6jDjSbCrDnwnLy417Q077+9UlEKJEIi4YOHyLrwka+24LaB4LmQfFx16qiLR+CorvCRqKJyR14uJQo3QjUv17AhQD860agi8JCgiPCRnLI6e+GdgVzwkZGV8JCLsvCYtIbctjrDhcKk8JGNpnY68JGZpQoyQjBvZio877+9YGDvv70hyLpoL/CRioPwkbGF8JGPgn1BbvCetKY/IfCfn6fgrLh5wqUKKUIncXvwkbuhLvCbsp0v37M6YMKlPypW8K6yp/CRo5s044CFLsOu77+9CjlCN/CRg6Am0agz8J6kjC508J65lCIvP+CotUvwnrm7wqvwn5W0wqXgrqnwn5W077+TzpNTeyUuKjcKLkIsUSQvZHf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gWwoaQhg7Z+G/ljwqdm9+6qyL4oKYbjp7KlXvv5MKRUJD4a+FJ/Cdkqbgr4bwnrmhL2bwlrmC8J6AlibDkCXwkYyC4YyUR+Cruy57YFc6PcOD8J+DhkDgs54s8J2SvuK2qiYmOgo3QjXita/wnYWU4bK/SvCRjo5Q4Z+4Jj/wnrqtcMKl8J2Su3DwkI6VwqAv8J6jiDjwkLySYOCouAoWQhTvv73wnoCkJiZ5JCVrLl0jYGDIugo4QjbwnpemXC8u4KauJuyjsvCRhJ8iP2orNyNdPeCvgsK+NTzwn4K+QCU68J+VtOChki8zIvCdlYYKQkJAwqVcOmBXSPCRsLvwnbyHOnvgq5DwkIq6PPCei4/wkY+K4LeuRsKlYPCRga7gprDwkYWF8J2SsPCdiIVBZOCouAotQivgupbgobY/aCThnYHgsYdNIkjwkL+177+9WOqnpT/wlq6L8J6Lvy/wlrWoCjJCMCnwkZiv77+c3Id7V/CRmaHgsoopP9Go4LGWJ/CQs53guJLwnriMSDcnaF0meys6JwoyQjDwkKSuezzgprdN8JGZlUI4PsObe9GoO/CflbRP44S0cfCeipFa8J+Ilnrit4Av0agKFUITw4BIRSpi8K62gFJZyLoq8JGRnwo4QjYpei/hj7hgP2nDmuOGgD9h8JCouPCdlLziupYizozwkYGY4KaPYGvgqptW8J60sVx1V8Klb2UKG0IZOvCQv6YmQMOP0ahc8JCjofCRtZY68JGIkQopQic/K1fij4nRqDnwkY+Y8JG0nybwkY6mZCF7QvCcvJl7JeqfmSLOn2AKCkIIUyDwnLmizpAKGEIW4bydJlLwkYaSL1k/ezTwlrWQ8JGPlwpDQkHwn5W08J64q8O7J9GoXfCfgrdb6qyEck4gdV/CvvCfrpvhjJRgyLrWjm7wnLqqJ2pg8JGkiTzwkYqALvCfq5TCpQovQi1w8J+VtD17ey54e0Z+NuCtleCwgfCRjbMlzb3wn4mESvCWq4ZsyLrwkaS9JX4KM0Ix8JG8imZkam3hsYLwka+eJUklJ+qhqj9uJz9eJTs6Pci64K2qJci6VvCfg6/ita8qewo6Qjg9PdGoIyXgrJBR8J2VhuCtnCMk4K2d8JGHosi6PGp7JVQ6LvCQqJdORfCfnL/gqLZ1JyZ78J64uQosQipJ8J6lnvCdqqLgt5Q20aj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wkoad8J66l+Cni/CQqJp6Nj4m8JGFpiJg8JC6rT1W8J+Wv0suCitCKfCRr7HwnrqRXvCQpLnCttGo8JCajjp6bcOL4aWASsi6JCPwkJeqNVwvChNCEeqfnDfwkpC0YC1AP/CeuKQ/CjBCLj0zSzpq8JaujyZP44GV4b+zP+Ozr8KlOjvwn5W08J2VjvCQnpYnRdGo8J+EtycKAkIACjlCN+CkmC7DjVxB8J+flC4n8J66oj/Iusi6PPCQuq3wn6uZ4LOiXHngqZ7DnGrIuvCQjqhc4LqEP1sKLEIq8J+VtGDwnZWDd/CRj4jgrqRQLc29VCrDkeCunNGo77+98JCAoEDwkYyICkJCQGBRe/CwvLMu8J+VtCo98JKMhuGqtFw8auCnneC2g2Dwn6qd8JGAr8KlOu+/vfCeub4/NfCdhp3wlquVcOKDkT8KJUIj8Ji0he2fkfCWqag2JiQqePCfg4bgr4cuJVfRqPCbsp1JXFAKQUI/Q/CYmoXNuuqpglwqbXA88JCWtvCRu7DCpc6GPcK48J+hgOK4vvCQo7zhnYI+XC7XmmBoP+Cnl/CQprd74Yy3CiVCIyTRqG/wkJa0QeCnteCqh8KlJWdeY0vwn6u04LC18JiksTwkCg9CDWDgtIxUPfCfhbs/PTYKKUInTGh18JG0lPCforY/bvCfq7TwkYO1XXtILjvgq4PwlqyEfvCRq49yCkJCQGLWjkVNw6nwkbWGL+GJizzwkpGy8JG8iPCforTwkYa4XXLwkZeQe2468JasovCegKjwnriT4rSnOCR94LeyZjoKEEIO4oWJKtGo4b2JYfCQlp0KJ0Il4YmY86CEqtGoIci64Ka/77+9POGxhinIuu+/lSrwkKSF4KuNLwokQiJVKsi6w64vXO+/vSfwn5uj8J60mkzqn5DCpfCdlYPhs6RuCj5CPGYlJ/CQkbVk8JC6sSzgr40uJmDgsrd28J+evWvDu+Cmi/CfgIPwkLaP4oG28JGprT/hi4Vg76y+8JGFowo1QjPvuJPwnZSYOj0i8JCAgfCeuZtcP+GxiMKl0ajCpXvwkYyDQeCqj0vwn5W0wqXhibtzKmoKJUIjLSQn8J6lmcKl8J+VtPCeuoF7JSFzPzlQeuGzsj/wn4miKyAKJEIi77+88JuFkPCdiIbDgPCflbRQKllcbnzqrZ0i8JGDqOGdogojQiE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/Zy9r4bO34aGb8J2UtfCRj5Fnw5UKFEISfsKlKuGHueG8uOGnv/CRhLtDChVCE17wk5CYcjpZJ1TgrYwk8JCegicKE0IRNu+/vULwn6CKMz/hpLtiyLoKMUIvJ1TwkZOSIuqdtOGqk3VFKnsmPPCdkp7gsYvcii7grp9rwqzwnrm80agiOCIvWXsKPUI78J2UuSBG8J6EuvCRh6vgtoJV4aqX8J64u2vjgrLwnoup44SvwrAvfPCeupPwnou/RC88el7CpfCRjaEKFkIUOifwnrSeINiW4Yyo8JGMhsKlLioKM0Ix8J+VtCR2PFbUoOCxnV7IuuGkttGoyLrgsYfhv6xxc/CQqYfwkYyGJWDwn4OSJCpUQQoFQgMmzowKIEIe8J2cvfCRrIDwn5W0XDrDiiRIwqIjT8KlLkTgvo0kCkhCRvCego/grqlc8JGCuDVZLuGyr2k8JXskfDw68J6Lj+C/jjzCvjjwkICt4KiyyLov4aKA8J2GnCXwn5W04Kqq8JuFlfCfopEKCEIGYybwnrmfCjxCOidt8JatlFTgqIPirbpy4LisKMOib+GJs+Cnh/CYp6wnRCU6Xy7IuvCRmJDhiZPvv73DisKu8JGMsjwKI0IhOi8vOvCflbThgqXCq8i6fuGxiTzvs4rIuidQPeG2tU5HCkNCQTzwkJW84KGeL/CeuZ1UJybhi4Pwn5+owqXwn4K26qKiKvCQgYBhJeC+vvCQgZYuYFNd8JGbmHtgTPCQtJ4nUsKlCjpCOOCovEU4fOG4tuqomPCflbTvrYTwkKSiKuG9oEt78K6okSc9ez9j8JC6rWkuVvCRnYLwnrm+J9GoCiRCIvCfgqdc8JGOiyHqo5fita/iuY/wkbGzVci68JGWlPCflbQKQ0JBM+C6t3jwkbST4oCW4LaO8J66q1/vv73wn5W0JeC7nk0uXPCRvLUvXm91J+GNufCYoJEv4LWIJHwq8JGwiF3CpVwKKUInRCLCpduG8Jy4rsK48JCjtS8q8JCMgVLwnrqX8J2Uu8i6dnslOiUvCiJCIMKlZuG/gTpj8J65viTwn5W0XFzgsIzwkb6wJ2A5PMKiCidCJWQi77+aIsKlYPCQsKVCPTPwm7G28J+VtOK3mzzgob/hj5HgvqMKJkIk4ZyrdS/wkJ604Kmewq9cwqVc8JCPiFxV4Z6FXjTgrI9hKmIvChd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vZGUSK7oBKAomCghiaXRmbGFncxIawgEXCgoEFCYUByU1JUVsEP///////////wEKEwoHZ3JhbnRlZRIIQgZQdWJsaWMKEwoHZ3JhbnRvchIIQgZQdWJsaWMKiwG6AYcBCiwKCGFjbF9tb2RlEiC6AR0KGwoIYml0ZmxhZ3MSD8IBDAoKKGdxEZkmYAEhbAotCgdncmFudGVlEiK6AR8KHQoKUHJlZGVmaW5lZBIPwgEMCgqZgAIFZUAVJkGMCigKB2dyYW50b3ISHboBGgoYCgRVc2VyEhDCAQ0KCwFZh1chKVFIQFScCny6AXkKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgphFQYCgUJ3VIVcChMKB2dyYW50ZWUSCEIGUHVibGljCjQKB2dyYW50b3ISKboBJgokCgZTeXN0ZW0SGsIBFwoKA2EgQzdodjlYTBD///////////8BClu6AVgKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgqVCGQ4NBJBghGcChMKB2dyYW50ZWUSCEIGUHVibGljChMKB2dyYW50b3ISCEIGUHVibGljCpcBugGTAQosCghhY2xfbW9kZRIgugEdChsKCGJpdGZsYWdzEg/CAQwKCngAWHRyVAN1ATwKLQoHZ3JhbnRlZRIiugEfCh0KClByZWRlZmluZWQSD8IBDAoKBXUZhWZjSXAUnAo0CgdncmFudG9yEim6ASYKJAoGU3lzdGVtEhrCARcKChWRNSR0RWkUIhwQ////////////AQqPAboBiwEKLAoIYWNsX21vZGUSILoBHQobCghiaXRmbGFncxIPwgEMCgoFNjdzVJQQQmOMCjIKB2dyYW50ZWUSJ7oBJAoiCgRVc2VyEhrCARcKChUjh4ZoYCVxSYwQ////////////AQonCgdncmFudG9yEhy6ARkKFwoEVXNlchIPwgEMCgqVdVUoRDKCZTI8Cny6AXkKNgoIYWNsX21vZGUSKroBJwolCghiaXRmbGFncxIZwgEWCgmUcJCIKAUHJhwQ/v//////////AQoqCgdncmFudGVlEh+6ARwKGgoGU3lzdGVtEhDCAQ0KCwGEIYJ5cDA3RilcChMKB2dyYW50b3ISCEIGUHVibGljClu6AVgKLAoIYWNsX21vZGUSILoBHQo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p4LuN4raRwqUKMEIu8J2VgfCRsLAsVMi6fPCQlbrwnYuCyLp44oKJOvCRjoN4e/CetITwnoCqyLopUQokQiLqrJE18JCAlfCRtajwkKm/8J2UiSY98Jaqg/CbspnhvZkiCiVCI/Cen6HihJXhvIjgqLYtLuG/lvCbspkv8JGWnfCQqZUib0M9ChtCGe+/vfCRkrVa4LOje3vRqPCXlJnwn6CWLyQKJEIiwqXCpSLwkbWAXUxReicnJT93az5c0ag9JDozJXsqaH17LgoSQhBVYfCflbTCpUjwnoqaKidgCixCKiQs4reW4Kq1di4m4LeKLi/CpT7wkaWAUl1gPFzwkKS0wrHwkKSg8JGxsgoVQhNHJCol8JGNkHlGNX1gKi4s77+9CihCJjoq8J2qoSIlYOqvk/CSvrjgp60v8J+VtFfwkb6w4a6p8J2UknsiCitCKSTCpWDDvdGoTiJpPMi6ZzpkVuGxkvCQoLhC4LSaOkDqpbnUs3slIidKCkBCPn1cUda0LnRO76q6wq491ZE+8J28qD8w8J6jk+G+qT/wkIer8JGkieCniEAh8J6fuPCflbRG4K6aYPCbsp8vCiVCI/CRj5Jp4Y+9JPCflbRyzozCpSbwkJK/4LOWPjxeyLo3NdGoCj5CPOK/gsOiw4484LGVXHFnP/CQlJknw4t+77+9XD3wkbWn8JC6sTxKN/CbhZHwkJamPMi6Oi/wn62x0ag3LgoEQgJiJgowQi484rarYWQ8KvCWvbzgqIJVP+CyteComMOpRyQmXjVMPXsiakdUblBgeyXwkbajCg1CC1TRqPCflbQlcEZgChVCE/CeuYLvv6ZcPzZ7Jmnwlqurbj0KO0I5w5ThnJHwkYyBIsOBbe+/vfCdlIpUUdGoK+C2nD/gso4yNOCzosOme/Cctag/8JGZpUMvyLrwkYGsCjBCLuGLhDDCpSritqbIui9ldkjwkY+CJEHgvanwnrikNMKkMfCRg4I3RiVS77+9MCoKMUIv8J65nfCQqJfwnZOl4bOBPEjwn4ep0ajgroI/wqV74ZyUciZg8J65guGchvCWtbUKOUI3XPCdkpzhsYLRqFbIulrDqyRiS+C6tPCeuZTgt6Yi44aUKOCquOK2uuK/u1wq4aa3Pe+/jWdjUAoWQhTvv71D8J2QtuCnjGfwkJGE8JGIhwotQitVIsKwYsKlXPC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 diff --git a/src/catalog/src/durable/upgrade/v89_to_v90.rs b/src/catalog/src/durable/upgrade/v89_to_v90.rs new file mode 100644 index 0000000000000..55f03eaa38921 --- /dev/null +++ b/src/catalog/src/durable/upgrade/v89_to_v90.rs @@ -0,0 +1,257 @@ +// Copyright Materialize, Inc. and contributors. All rights reserved. +// +// Use of this software is governed by the Business Source License +// included in the LICENSE file. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0. + +use crate::durable::upgrade::MigrationAction; +use crate::durable::upgrade::json_compatible::JsonCompatible; +use crate::durable::upgrade::objects_v89 as v89; +use crate::durable::upgrade::objects_v90 as v90; + +crate::json_compatible!(v89::ClusterKey with v90::ClusterKey); +crate::json_compatible!(v89::ClusterReplicaKey with v90::ClusterReplicaKey); +crate::json_compatible!(v89::ClusterId with v90::ClusterId); +crate::json_compatible!(v89::RoleId with v90::RoleId); +crate::json_compatible!(v89::MzAclItem with v90::MzAclItem); +crate::json_compatible!(v89::ReplicaLogging with v90::ReplicaLogging); +crate::json_compatible!(v89::ReplicaLocation with v90::ReplicaLocation); +crate::json_compatible!(v89::OptimizerFeatureOverride with v90::OptimizerFeatureOverride); +crate::json_compatible!(v89::ClusterSchedule with v90::ClusterSchedule); +crate::json_compatible!(v89::AutoScalingStrategy with v90::AutoScalingStrategy); +crate::json_compatible!(v89::BurstState with v90::BurstState); +crate::json_compatible!(v89::ReconfigurationStatus with v90::ReconfigurationStatus); +crate::json_compatible!(v89::OnTimeoutAction with v90::OnTimeoutAction); + +/// Adds the `arrangement_compression` flag to managed clusters and cluster +/// replicas, backfilling it as `false`. The flag also appears on a managed +/// cluster's in-flight `reconfiguration` target, backfilled the same way. +/// +/// Managed `Cluster` and `ClusterReplica` records gained a new field, so their +/// stored JSON is no longer readable as the v90 type. Every such record is +/// rewritten. Unmanaged clusters and all other records are unchanged and pass +/// through untouched. +pub fn upgrade( + snapshot: Vec, +) -> Vec> { + let mut migrations = Vec::new(); + for update in snapshot { + match update { + v89::StateUpdateKind::Cluster(old_cluster) + if matches!( + old_cluster.value.config.variant, + v89::ClusterVariant::Managed(_) + ) => + { + let new_cluster = migrate_cluster(old_cluster.clone()); + migrations.push(MigrationAction::Update( + v89::StateUpdateKind::Cluster(old_cluster), + v90::StateUpdateKind::Cluster(new_cluster), + )); + } + v89::StateUpdateKind::ClusterReplica(old_replica) => { + let new_replica = migrate_replica(old_replica.clone()); + migrations.push(MigrationAction::Update( + v89::StateUpdateKind::ClusterReplica(old_replica), + v90::StateUpdateKind::ClusterReplica(new_replica), + )); + } + _ => {} + } + } + migrations +} + +fn migrate_cluster(old: v89::Cluster) -> v90::Cluster { + let v89::Cluster { key, value } = old; + let v89::ClusterVariant::Managed(m) = value.config.variant else { + unreachable!("caller guards on the managed variant"); + }; + v90::Cluster { + key: JsonCompatible::convert(&key), + value: v90::ClusterValue { + name: value.name, + owner_id: JsonCompatible::convert(&value.owner_id), + privileges: value + .privileges + .iter() + .map(JsonCompatible::convert) + .collect(), + config: v90::ClusterConfig { + workload_class: value.config.workload_class, + variant: v90::ClusterVariant::Managed(migrate_managed(m)), + }, + }, + } +} + +fn migrate_managed(m: v89::ManagedCluster) -> v90::ManagedCluster { + v90::ManagedCluster { + size: m.size, + replication_factor: m.replication_factor, + availability_zones: m.availability_zones, + logging: JsonCompatible::convert(&m.logging), + arrangement_compression: false, + optimizer_feature_overrides: m + .optimizer_feature_overrides + .iter() + .map(JsonCompatible::convert) + .collect(), + schedule: JsonCompatible::convert(&m.schedule), + auto_scaling_strategy: m + .auto_scaling_strategy + .as_ref() + .map(JsonCompatible::convert), + reconfiguration: m.reconfiguration.map(migrate_reconfiguration), + burst: m.burst.as_ref().map(JsonCompatible::convert), + } +} + +fn migrate_reconfiguration(old: v89::ReconfigurationState) -> v90::ReconfigurationState { + let v89::ReconfigurationTarget { + size, + replication_factor, + availability_zones, + logging, + } = old.target; + v90::ReconfigurationState { + target: v90::ReconfigurationTarget { + size, + replication_factor, + availability_zones, + logging: JsonCompatible::convert(&logging), + arrangement_compression: false, + }, + deadline: old.deadline, + on_timeout: JsonCompatible::convert(&old.on_timeout), + status: JsonCompatible::convert(&old.status), + } +} + +fn migrate_replica(old: v89::ClusterReplica) -> v90::ClusterReplica { + let v89::ClusterReplica { key, value } = old; + let v89::ReplicaConfig { logging, location } = value.config; + v90::ClusterReplica { + key: JsonCompatible::convert(&key), + value: v90::ClusterReplicaValue { + cluster_id: JsonCompatible::convert(&value.cluster_id), + name: value.name, + config: v90::ReplicaConfig { + logging: JsonCompatible::convert(&logging), + location: JsonCompatible::convert(&location), + arrangement_compression: false, + }, + owner_id: JsonCompatible::convert(&value.owner_id), + }, + } +} + +#[cfg(test)] +mod tests { + use crate::durable::upgrade::MigrationAction; + use crate::durable::upgrade::v89_to_v90::upgrade; + use crate::durable::upgrade::{objects_v89 as v89, objects_v90 as v90}; + + fn managed_cluster(id: u64) -> v89::Cluster { + v89::Cluster { + key: v89::ClusterKey { + id: v89::ClusterId::User(id), + }, + value: v89::ClusterValue { + name: format!("cluster{id}"), + owner_id: v89::RoleId::User(1), + privileges: Vec::new(), + config: v89::ClusterConfig { + workload_class: None, + variant: v89::ClusterVariant::Managed(v89::ManagedCluster { + size: "small".to_string(), + replication_factor: 1, + availability_zones: vec!["az1".to_string()], + logging: v89::ReplicaLogging { + log_logging: false, + interval: None, + }, + optimizer_feature_overrides: Vec::new(), + schedule: v89::ClusterSchedule::Manual, + auto_scaling_strategy: None, + reconfiguration: None, + burst: None, + }), + }, + }, + } + } + + fn unmanaged_cluster(id: u64) -> v89::Cluster { + v89::Cluster { + key: v89::ClusterKey { + id: v89::ClusterId::User(id), + }, + value: v89::ClusterValue { + name: format!("cluster{id}"), + owner_id: v89::RoleId::User(1), + privileges: Vec::new(), + config: v89::ClusterConfig { + workload_class: None, + variant: v89::ClusterVariant::Unmanaged, + }, + }, + } + } + + fn replica(id: u64) -> v89::ClusterReplica { + v89::ClusterReplica { + key: v89::ClusterReplicaKey { + id: v89::ReplicaId::User(id), + }, + value: v89::ClusterReplicaValue { + cluster_id: v89::ClusterId::User(1), + name: format!("r{id}"), + config: v89::ReplicaConfig { + logging: v89::ReplicaLogging { + log_logging: false, + interval: None, + }, + location: v89::ReplicaLocation::Managed(v89::ManagedLocation { + size: "small".to_string(), + availability_zones: vec!["az1".to_string()], + billed_as: None, + internal: false, + pending: false, + }), + }, + owner_id: v89::RoleId::User(1), + }, + } + } + + #[mz_ore::test] + fn backfills_managed_cluster_and_replica_as_false() { + let migrations = upgrade(vec![ + v89::StateUpdateKind::Cluster(managed_cluster(1)), + v89::StateUpdateKind::Cluster(unmanaged_cluster(2)), + v89::StateUpdateKind::ClusterReplica(replica(1)), + ]); + // Managed cluster and replica migrate; the unmanaged cluster passes through. + assert_eq!(migrations.len(), 2); + + let MigrationAction::Update(_, v90::StateUpdateKind::Cluster(cluster)) = &migrations[0] + else { + panic!("expected a cluster update"); + }; + let v90::ClusterVariant::Managed(managed) = &cluster.value.config.variant else { + panic!("expected a managed cluster"); + }; + assert!(!managed.arrangement_compression); + + let MigrationAction::Update(_, v90::StateUpdateKind::ClusterReplica(replica)) = + &migrations[1] + else { + panic!("expected a replica update"); + }; + assert!(!replica.value.config.arrangement_compression); + } +} diff --git a/src/catalog/src/memory/objects.rs b/src/catalog/src/memory/objects.rs index 83ec456339c3d..beae6a2c0aeb9 100644 --- a/src/catalog/src/memory/objects.rs +++ b/src/catalog/src/memory/objects.rs @@ -411,6 +411,7 @@ impl Cluster { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides, schedule, @@ -433,7 +434,10 @@ impl Cluster { interval: None, } => None, }; - let compute = ComputeReplicaConfig { introspection }; + let compute = ComputeReplicaConfig { + introspection, + arrangement_compression: *arrangement_compression, + }; CreateClusterVariant::Managed(CreateClusterManagedPlan { replication_factor: replication_factor.clone(), size: size.clone(), @@ -3344,6 +3348,8 @@ pub struct ClusterVariantManaged { pub size: String, pub availability_zones: Vec, pub logging: ReplicaLogging, + /// Whether arrangements on this cluster's replicas request dictionary compression. + pub arrangement_compression: bool, pub replication_factor: u32, pub optimizer_feature_overrides: OptimizerFeatureOverrides, pub schedule: ClusterSchedule, @@ -3362,6 +3368,7 @@ pub struct ManagedReplicaConfigShape<'a> { pub size: &'a str, pub availability_zones: &'a [String], pub logging: &'a ReplicaLogging, + pub arrangement_compression: bool, } impl<'a> ManagedReplicaConfigShape<'a> { @@ -3370,11 +3377,13 @@ impl<'a> ManagedReplicaConfigShape<'a> { size: &'a str, availability_zones: &'a [String], logging: &'a ReplicaLogging, + arrangement_compression: bool, ) -> Self { Self { size, availability_zones, logging, + arrangement_compression, } } } @@ -3386,6 +3395,7 @@ impl ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor: _, optimizer_feature_overrides: _, schedule: _, @@ -3393,7 +3403,7 @@ impl ClusterVariantManaged { reconfiguration: _, burst: _, } = self; - ManagedReplicaConfigShape::new(size, availability_zones, logging) + ManagedReplicaConfigShape::new(size, availability_zones, logging, *arrangement_compression) } /// Returns this managed cluster's realized shape as a reconfiguration target. @@ -3402,6 +3412,7 @@ impl ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: _, schedule: _, @@ -3414,6 +3425,7 @@ impl ClusterVariantManaged { replication_factor: *replication_factor, availability_zones: availability_zones.clone(), logging: logging.clone(), + arrangement_compression: *arrangement_compression, } } @@ -3446,6 +3458,7 @@ impl From for durable::ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides, schedule, @@ -3457,6 +3470,7 @@ impl From for durable::ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: optimizer_feature_overrides.into(), schedule, @@ -3475,6 +3489,7 @@ impl From for ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides, schedule, @@ -3486,6 +3501,7 @@ impl From for ClusterVariantManaged { size, availability_zones, logging, + arrangement_compression, replication_factor, optimizer_feature_overrides: optimizer_feature_overrides.into(), schedule, @@ -3626,6 +3642,7 @@ pub struct ReconfigurationTarget { pub replication_factor: u32, pub availability_zones: Vec, pub logging: ReplicaLogging, + pub arrangement_compression: bool, } impl ReconfigurationTarget { @@ -3644,12 +3661,14 @@ impl From for durable::ReconfigurationTarget { replication_factor, availability_zones, logging, + arrangement_compression, } = target; Self { size, replication_factor, availability_zones, logging, + arrangement_compression, } } } @@ -3663,12 +3682,14 @@ impl From for ReconfigurationTarget { replication_factor, availability_zones, logging, + arrangement_compression, } = target; Self { size, replication_factor, availability_zones, logging, + arrangement_compression, } } } diff --git a/src/catalog/tests/debug.rs b/src/catalog/tests/debug.rs index 72caa0140e2d5..b610de12793b1 100644 --- a/src/catalog/tests/debug.rs +++ b/src/catalog/tests/debug.rs @@ -369,6 +369,7 @@ async fn test_debug_edit_fencing(state_builder: TestCatalogStateBuilder) { .open(SYSTEM_TIME().into(), &test_bootstrap_args()) .await .unwrap(); + let _ = state.sync_to_current_updates().await.unwrap(); let mut debug_state = state_builder .clone() diff --git a/src/catalog/tests/read-write.rs b/src/catalog/tests/read-write.rs index a2d59cc365437..387675e8937dc 100644 --- a/src/catalog/tests/read-write.rs +++ b/src/catalog/tests/read-write.rs @@ -102,6 +102,7 @@ async fn test_allocate_id(state_builder: TestCatalogStateBuilder) { let start_id = state.get_next_id(id_type).await.unwrap(); let commit_ts = state.current_upper().await; + // Allocation does not require the initial update queue to be drained. let ids = state.allocate_id(id_type, 3, commit_ts).await.unwrap(); assert_eq!(ids, (start_id..(start_id + 3)).collect::>()); @@ -122,6 +123,239 @@ async fn test_allocate_id(state_builder: TestCatalogStateBuilder) { Box::new(state).expire().await; } +#[mz_ore::test(tokio::test)] +#[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` +async fn test_persist_transaction_rejects_pending_catalog_content() { + let persist_client = PersistClient::new_for_tests().await; + let mut state = TestCatalogStateBuilder::new(persist_client) + .with_default_deploy_generation() + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + + let mut update_counts = Vec::new(); + for _ in 0..2 { + let err = state.transaction().await.unwrap_err(); + match err { + CatalogError::Durable(DurableCatalogError::CatalogOutOfSync { + update_count, .. + }) => { + assert!(update_count > 0); + update_counts.push(update_count); + } + err => panic!("unexpected error: {err:?}"), + } + } + assert_eq!(update_counts[0], update_counts[1]); + + let updates = state.sync_to_current_updates().await.unwrap(); + assert_eq!(updates.len(), update_counts[0]); + + let txn = state.transaction().await.unwrap(); + drop(txn); + + Box::new(state).expire().await; +} + +#[mz_ore::test(tokio::test)] +#[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` +async fn test_dry_run_transaction_rejects_mem_replace_escape() { + let persist_client = PersistClient::new_for_tests().await; + let mut dry_run_state = TestCatalogStateBuilder::new(persist_client.clone()) + .with_default_deploy_generation() + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + let mut replacement_state = TestCatalogStateBuilder::new(persist_client) + .with_default_deploy_generation() + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + let _ = dry_run_state.sync_to_current_updates().await.unwrap(); + let _ = replacement_state.sync_to_current_updates().await.unwrap(); + + let initial_id = dry_run_state + .get_next_id(USER_ITEM_ALLOC_KEY) + .await + .unwrap(); + let initial_upper = dry_run_state.current_upper().await; + let snapshot = dry_run_state.snapshot().await.unwrap(); + let mut dry_run = dry_run_state.transaction_from_snapshot(snapshot).unwrap(); + let ids = dry_run + .transaction_mut() + .get_and_increment_id_by(USER_ITEM_ALLOC_KEY.to_string(), 1) + .unwrap(); + assert_eq!(ids, vec![initial_id]); + let _ = dry_run.transaction_mut().get_and_commit_op_updates(); + + let replacement = replacement_state.transaction().await.unwrap(); + let escaped = std::mem::replace(dry_run.transaction_mut(), replacement); + drop(dry_run); + + let commit_ts = escaped.upper(); + let err = escaped.commit(commit_ts).await.unwrap_err(); + assert!(matches!( + err, + CatalogError::Durable(DurableCatalogError::DryRunTransaction) + )); + assert_eq!(dry_run_state.current_upper().await, initial_upper); + assert_eq!( + dry_run_state + .get_next_id(USER_ITEM_ALLOC_KEY) + .await + .unwrap(), + initial_id + ); + + Box::new(dry_run_state).expire().await; + Box::new(replacement_state).expire().await; +} + +#[mz_ore::test(tokio::test)] +#[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` +async fn test_persist_advance_upper_at_least_semantics() { + let persist_client = PersistClient::new_for_tests().await; + let state_builder = TestCatalogStateBuilder::new(persist_client); + let state_builder = state_builder.with_default_deploy_generation(); + let mut state = state_builder + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + + let upper = state.current_upper().await; + + assert_ok!(state.advance_upper(upper).await); + assert_ok!( + state + .advance_upper(upper.step_back().unwrap_or_default()) + .await + ); + assert_eq!(state.current_upper().await, upper); + + let target = upper.step_forward().step_forward(); + assert_ok!(state.advance_upper(target).await); + assert_eq!(state.current_upper().await, target); + + Box::new(state).expire().await; +} + +#[mz_ore::test(tokio::test)] +#[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` +async fn test_persist_commit_rebases_over_empty_progress() { + let persist_client = PersistClient::new_for_tests().await; + let state_builder = TestCatalogStateBuilder::new(persist_client); + let state_builder = state_builder.with_default_deploy_generation(); + + let id_type = USER_ITEM_ALLOC_KEY; + let mut state = state_builder + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + + let commit_ts = state.current_upper().await; + let overtaken = commit_ts.step_forward().step_forward(); + assert_ok!(state.advance_upper(overtaken).await); + + let start_id = state.get_next_id(id_type).await.unwrap(); + let ids = state.allocate_id(id_type, 1, commit_ts).await.unwrap(); + assert_eq!(ids, vec![start_id]); + + assert!(state.current_upper().await > overtaken); + let next_id = state.get_next_id(id_type).await.unwrap(); + assert_eq!(next_id, start_id + 1); + + Box::new(state).expire().await; +} + +#[mz_ore::test(tokio::test)] +#[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` +async fn test_persist_conflicts_with_empty_progress_rebase() { + use mz_catalog::durable::persist_desc; + use mz_persist_client::Diagnostics; + use mz_persist_types::codec_impls::UnitSchema; + use mz_storage_types::sources::SourceData; + use timely::progress::Antichain; + + let persist_client = PersistClient::new_for_tests().await; + let state_builder = + TestCatalogStateBuilder::new(persist_client.clone()).with_default_deploy_generation(); + let mut state = state_builder + .unwrap_build() + .await + .open(SYSTEM_TIME().into(), &test_bootstrap_args()) + .await + .unwrap(); + // Exclude bootstrap updates from conflict classification below. + let _ = state.sync_to_current_updates().await.unwrap(); + + // A raw handle advances the upper without fencing, exercising upper-mismatch classification. + let mut raw_write = persist_client + .open_writer::( + state.shard_id(), + Arc::new(persist_desc()), + Arc::new(UnitSchema::default()), + Diagnostics { + shard_name: "catalog".to_string(), + handle_purpose: "test concurrent empty progress".to_string(), + }, + ) + .await + .expect("invalid usage"); + let empty: Vec<((SourceData, ()), mz_repr::Timestamp, i64)> = Vec::new(); + + let upper = state.current_upper().await; + let bumped = upper.step_forward().step_forward(); + raw_write + .compare_and_append( + empty.clone(), + Antichain::from_elem(upper), + Antichain::from_elem(bumped), + ) + .await + .expect("invalid usage") + .expect("no conflict"); + + let txn = state.transaction().await.unwrap(); + assert_eq!(txn.upper(), bumped); + drop(txn); + + let target = bumped.step_forward(); + assert_ok!(state.advance_upper(target).await); + assert_eq!(state.current_upper().await, target); + + let id_type = USER_ITEM_ALLOC_KEY; + let start_id = state.get_next_id(id_type).await.unwrap(); + let mut txn = state.transaction().await.unwrap(); + let commit_ts = txn.upper(); + let ids = txn.get_and_increment_id_by(id_type.to_string(), 1).unwrap(); + assert_eq!(ids, vec![start_id]); + let _updates = txn.get_and_commit_op_updates(); + raw_write + .compare_and_append( + empty, + Antichain::from_elem(target), + Antichain::from_elem(target.step_forward()), + ) + .await + .expect("invalid usage") + .expect("no conflict"); + assert_ok!(txn.commit(commit_ts).await); + let next_id = state.get_next_id(id_type).await.unwrap(); + assert_eq!(next_id, start_id + 1); + + Box::new(state).expire().await; +} + #[mz_ore::test(tokio::test)] #[cfg_attr(miri, ignore)] // unsupported operation: can't call foreign function `TLS_client_method` on OS `linux` async fn test_persist_audit_logs() { @@ -446,6 +680,8 @@ async fn test_non_writer_commits(state_builder: TestCatalogStateBuilder) { // Read-only catalog can successfully commit empty transaction. { + let updates = reader_state.sync_to_current_updates().await.unwrap(); + assert!(!updates.is_empty()); let txn = reader_state.transaction().await.unwrap(); let commit_ts = txn.upper(); txn.commit(commit_ts).await.unwrap(); diff --git a/src/catalog/tests/snapshots/debug__opened_trace.snap b/src/catalog/tests/snapshots/debug__opened_trace.snap index 322cb543200d2..86cc92d68ab5b 100644 --- a/src/catalog/tests/snapshots/debug__opened_trace.snap +++ b/src/catalog/tests/snapshots/debug__opened_trace.snap @@ -444,6 +444,7 @@ Trace { }, ), }, + arrangement_compression: false, optimizer_feature_overrides: [], schedule: Manual, auto_scaling_strategy: None, @@ -497,6 +498,7 @@ Trace { pending: false, }, ), + arrangement_compression: false, }, owner_id: System( 1, diff --git a/src/catalog/tests/snapshots/open__initial_snapshot.snap b/src/catalog/tests/snapshots/open__initial_snapshot.snap index 3ca523d0ea3f6..249de836bccb2 100644 --- a/src/catalog/tests/snapshots/open__initial_snapshot.snap +++ b/src/catalog/tests/snapshots/open__initial_snapshot.snap @@ -621,6 +621,7 @@ Snapshot { }, ), }, + arrangement_compression: false, optimizer_feature_overrides: [], schedule: Manual, auto_scaling_strategy: None, @@ -694,6 +695,7 @@ Snapshot { pending: false, }, ), + arrangement_compression: false, }, owner_id: System( 1, diff --git a/src/cluster-controller/src/ctx.rs b/src/cluster-controller/src/ctx.rs index 2e376f249ecbd..8813032dad884 100644 --- a/src/cluster-controller/src/ctx.rs +++ b/src/cluster-controller/src/ctx.rs @@ -91,6 +91,7 @@ pub struct ClusterState { pub replication_factor: u32, pub availability_zones: Vec, pub logging: ComputeReplicaLogging, + pub arrangement_compression: bool, pub auto_scaling_policy: Option, /// Latest graceful reconfiguration record, if one has been written. pub reconfiguration: Option, @@ -107,6 +108,7 @@ impl ClusterState { size: self.size.clone(), availability_zones: AvailabilityZones(self.availability_zones.clone()), logging: self.logging.clone(), + arrangement_compression: self.arrangement_compression, } } @@ -118,6 +120,7 @@ impl ClusterState { replication_factor: self.replication_factor, availability_zones: AvailabilityZones(self.availability_zones.clone()), logging: self.logging.clone(), + arrangement_compression: self.arrangement_compression, auto_scaling_policy: self.auto_scaling_policy.clone(), reconfiguration: self.reconfiguration.clone(), burst: self.burst.clone(), @@ -136,6 +139,7 @@ pub struct StateWrite { pub new_replication_factor: Option, pub new_availability_zones: Option>, pub new_logging: Option, + pub new_arrangement_compression: Option, /// Write or clear the reconfiguration record, together with its audit /// intent. `None` leaves the record unchanged. pub reconfiguration: Option, @@ -180,6 +184,7 @@ impl StateWrite { new_replication_factor, new_availability_zones, new_logging, + new_arrangement_compression, reconfiguration, burst, } = self; @@ -187,6 +192,7 @@ impl StateWrite { && new_replication_factor.is_none() && new_availability_zones.is_none() && new_logging.is_none() + && new_arrangement_compression.is_none() && reconfiguration.is_none() && burst.is_none() } diff --git a/src/cluster-controller/src/lib.rs b/src/cluster-controller/src/lib.rs index a86034d2316bd..71fd88a8967b3 100644 --- a/src/cluster-controller/src/lib.rs +++ b/src/cluster-controller/src/lib.rs @@ -285,6 +285,11 @@ impl ClusterController { writes.iter().map(|w| w.new_logging.clone()), &mut conflicts, ), + new_arrangement_compression: join( + "arrangement_compression", + writes.iter().map(|w| w.new_arrangement_compression), + &mut conflicts, + ), reconfiguration: join( "reconfiguration", writes.iter().map(|w| w.reconfiguration.clone()), diff --git a/src/cluster-controller/src/strategy.rs b/src/cluster-controller/src/strategy.rs index 29cad2a65ba3e..5092149d18657 100644 --- a/src/cluster-controller/src/strategy.rs +++ b/src/cluster-controller/src/strategy.rs @@ -287,6 +287,7 @@ impl Strategy for GracefulReconfigurationStrategy { new_replication_factor: Some(record.target.replication_factor), new_availability_zones: Some(record.target.availability_zones.0.clone()), new_logging: Some(record.target.logging.clone()), + new_arrangement_compression: Some(record.target.arrangement_compression), reconfiguration: Some(ReconfigurationWrite { record: Some(ReconfigurationRecord { status: ReconfigurationStatus::Finalized, @@ -598,6 +599,7 @@ impl Strategy for HydrationBurstStrategy { size: record.burst_size.clone(), availability_zones: AvailabilityZones(state.availability_zones.clone()), logging: state.logging.clone(), + arrangement_compression: state.arrangement_compression, }, }] } diff --git a/src/cluster-controller/src/tests.rs b/src/cluster-controller/src/tests.rs index 6df09637892f3..18c3998139bb4 100644 --- a/src/cluster-controller/src/tests.rs +++ b/src/cluster-controller/src/tests.rs @@ -62,6 +62,7 @@ fn shape(size: &str) -> ReplicaShape { size: size.to_string(), availability_zones: AvailabilityZones(Vec::new()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, } } @@ -103,6 +104,7 @@ fn state( replication_factor, availability_zones: Vec::new(), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, auto_scaling_policy: None, reconfiguration: None, burst: None, @@ -315,6 +317,7 @@ impl FakeCtx { new_replication_factor, new_availability_zones, new_logging, + new_arrangement_compression, reconfiguration, burst, } = write; @@ -330,6 +333,9 @@ impl FakeCtx { if let Some(logging) = new_logging { state.logging = logging.clone(); } + if let Some(arrangement_compression) = new_arrangement_compression { + state.arrangement_compression = *arrangement_compression; + } if let Some(reconfiguration) = reconfiguration { state.reconfiguration = reconfiguration.record.clone(); } @@ -656,6 +662,7 @@ async fn caa_conflict_is_rejected_and_recovered() { replication_factor: state.replication_factor, availability_zones: AvailabilityZones(Vec::new()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, }, deadline: now, on_timeout: OnTimeout::Rollback, @@ -722,6 +729,7 @@ async fn caa_conflict_is_rejected_and_recovered() { replication_factor: 1, availability_zones: AvailabilityZones(Vec::new()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, auto_scaling_policy: None, reconfiguration: None, burst: None, @@ -820,6 +828,7 @@ async fn create_drop_is_caa_guarded_and_recovers() { replication_factor: 1, availability_zones: AvailabilityZones(Vec::new()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, auto_scaling_policy: None, reconfiguration: None, burst: None, @@ -1080,6 +1089,7 @@ fn record_on_timeout( replication_factor: rf, availability_zones: AvailabilityZones(Vec::new()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, }, deadline: Timestamp::from(deadline), on_timeout, @@ -1103,6 +1113,7 @@ fn reconfiguring_state( replication_factor: rf, availability_zones: Vec::new(), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, auto_scaling_policy: None, reconfiguration: Some(rec), burst: None, @@ -1541,6 +1552,7 @@ fn graceful_az_only_reconfiguration_is_a_shape_change() { replication_factor: 1, availability_zones: vec!["az1".to_string()], logging: ComputeReplicaLogging::default(), + arrangement_compression: false, auto_scaling_policy: None, reconfiguration: Some(ReconfigurationRecord { target: ReconfigurationTarget { @@ -1548,6 +1560,7 @@ fn graceful_az_only_reconfiguration_is_a_shape_change() { replication_factor: 1, availability_zones: AvailabilityZones(vec!["az2".to_string()]), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, }, deadline: Timestamp::from(5000u64), on_timeout: OnTimeout::Rollback, @@ -1561,6 +1574,7 @@ fn graceful_az_only_reconfiguration_is_a_shape_change() { size: "100cc".to_string(), availability_zones: AvailabilityZones(vec!["az1".to_string()]), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, }), internal: false, billed_as: false, @@ -2165,6 +2179,7 @@ mod hydration_burst { size: "400cc".to_string(), availability_zones: AvailabilityZones(s.availability_zones.clone()), logging: ComputeReplicaLogging::default(), + arrangement_compression: false, }; assert!(desired[0].shape.matches(&expected)); } diff --git a/src/compute-client/src/controller.rs b/src/compute-client/src/controller.rs index 6b024cb78a655..33c3d9a1a2672 100644 --- a/src/compute-client/src/controller.rs +++ b/src/compute-client/src/controller.rs @@ -722,9 +722,13 @@ impl ComputeController { // Capture dictionary compression once, at replica creation, and hold it fixed for the // replica's lifetime (see `InstanceConfig::arrangement_dictionary_compression`). This is - // why a later flip of the flag only affects replicas created afterwards. - let arrangement_dictionary_compression = - ENABLE_ARRANGEMENT_DICTIONARY_COMPRESSION_ALPHA.get(&self.dyncfg); + // why a later flip of the flag only affects replicas created afterwards. The feature flag + // only gates the feature: a replica honors its per-cluster/replica configured value only + // while the flag is enabled, so turning the flag off disables compression on new or + // restarted replicas regardless of their configuration. + let arrangement_dictionary_compression = ENABLE_ARRANGEMENT_DICTIONARY_COMPRESSION_ALPHA + .get(&self.dyncfg) + && config.arrangement_compression; let replica_config = ReplicaConfig { location, diff --git a/src/compute-types/src/config.rs b/src/compute-types/src/config.rs index fe94160be1c63..cde3aef4b685d 100644 --- a/src/compute-types/src/config.rs +++ b/src/compute-types/src/config.rs @@ -17,6 +17,12 @@ use std::time::Duration; pub struct ComputeReplicaConfig { /// TODO(database-issues#7533): Add documentation. pub logging: ComputeReplicaLogging, + /// Whether arrangements on this replica request dictionary compression. + /// + /// This carries the configured value. Whether the replica honors it is + /// gated at replica creation by the `enable_arrangement_dictionary_compression_alpha` + /// feature flag. + pub arrangement_compression: bool, } /// Logging configuration of a replica. diff --git a/src/compute-types/src/dyncfgs.rs b/src/compute-types/src/dyncfgs.rs index e1e8a96349d18..c8b800ff7cb77 100644 --- a/src/compute-types/src/dyncfgs.rs +++ b/src/compute-types/src/dyncfgs.rs @@ -116,7 +116,8 @@ pub const COLUMN_PAGED_BATCHER_SWAP_PAGEOUT: Config = Config::new( "Eagerly evict the column-paged batcher's lz4-compressed swap-backend spill chunks from RSS \ via `MADV_PAGEOUT` (they otherwise receive no madvise and are reclaimed only lazily). Only \ meaningful when `column_paged_batcher_lz4 = true` and the swap backend is active.", -); +) +.scoped(ParameterScope::Replica); /// Whether rendering should use `mz_join_core` rather than DD's `JoinCore::join_core`. pub const ENABLE_MZ_JOIN_CORE: Config = Config::new( diff --git a/src/environmentd/src/deployment/preflight.rs b/src/environmentd/src/deployment/preflight.rs index f7c52823d9824..aecc92f15326f 100644 --- a/src/environmentd/src/deployment/preflight.rs +++ b/src/environmentd/src/deployment/preflight.rs @@ -257,6 +257,12 @@ async fn check_ddl_changes( .await .unwrap_or_terminate("can open in savepoint mode"); + // `transaction` rejects unapplied catalog content. This reader has no derived catalog to + // update, so discard the initial update stream before opening the transaction. + let _ = catalog + .sync_to_current_updates() + .await + .unwrap_or_terminate("unexpected error while draining initial catalog updates"); let tx = catalog .transaction() .await @@ -344,6 +350,12 @@ async fn get_next_ids( .await .unwrap_or_terminate("can open in savepoint mode"); + // `transaction` rejects unapplied catalog content. This reader has no derived catalog to + // update, so discard the initial update stream before opening the transaction. + let _ = catalog + .sync_to_current_updates() + .await + .unwrap_or_terminate("unexpected error while draining initial catalog updates"); let tx = catalog .transaction() .await diff --git a/src/environmentd/tests/server.rs b/src/environmentd/tests/server.rs index ef6d8b963974c..e0268eded873e 100644 --- a/src/environmentd/tests/server.rs +++ b/src/environmentd/tests/server.rs @@ -7250,3 +7250,43 @@ fn test_inject_audit_events_malformed() { .unwrap(); assert_eq!(res.status(), StatusCode::BAD_REQUEST); } + +// Dropping queued write responses during shutdown must not panic in a destructor. +#[mz_ore::test] +#[cfg_attr(miri, ignore)] // too slow +#[allow(clippy::disallowed_methods)] +fn test_shutdown_with_inflight_writes() { + for round in 0..3 { + let server = test_util::TestHarness::default().start_blocking(); + { + let mut client = server.connect(postgres::NoTls).unwrap(); + client.batch_execute("CREATE TABLE t (a int)").unwrap(); + } + + let stop = Arc::new(AtomicBool::new(false)); + let mut handles = Vec::new(); + for _ in 0..4 { + let pg_config = server.pg_config(); + let stop = Arc::clone(&stop); + handles.push(thread::spawn(move || { + let Ok(mut client) = pg_config.connect(postgres::NoTls) else { + return; + }; + while !stop.load(Ordering::Relaxed) { + if client.batch_execute("INSERT INTO t VALUES (1)").is_err() { + return; + } + } + })); + } + + thread::sleep(Duration::from_millis(500)); + drop(server); + + stop.store(true, Ordering::Relaxed); + for handle in handles { + let _ = handle.join(); + } + tracing::info!("round {round} survived"); + } +} diff --git a/src/interchange/src/envelopes.rs b/src/interchange/src/envelopes.rs index 23b8c1d53b6b3..7cd3470800954 100644 --- a/src/interchange/src/envelopes.rs +++ b/src/interchange/src/envelopes.rs @@ -19,80 +19,125 @@ use mz_ore::cast::CastFrom; use mz_repr::{ CatalogItemId, ColumnName, Datum, Diff, Row, RowPacker, SqlColumnType, SqlScalarType, }; +use timely::progress::Antichain; use crate::avro::DiffPair; /// Walks `batch` and invokes `on_diff_pair` for each `DiffPair` at each /// `(key, timestamp)`. /// +/// Thin wrapper around `iter_diff_pairs`. +pub fn for_each_diff_pair(batch: &B, mut on_diff_pair: F) +where + B: BatchReader