Module materialize.data_ingest.transaction_def

Expand source code Browse git
# 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.

import random
import time
from collections.abc import Iterator
from enum import Enum

from materialize.data_ingest.definition import Definition
from materialize.data_ingest.field import Field
from materialize.data_ingest.rowlist import RowList
from materialize.data_ingest.transaction import Transaction
from materialize.mzcompose.composition import Composition


class TransactionSize(Enum):
    SINGLE_OPERATION = 1
    HUGE = 1_000_000_000


class TransactionDef:
    operations: list[Definition]
    size: TransactionSize

    def __init__(
        self,
        operations: list[Definition],
        size: TransactionSize = TransactionSize.SINGLE_OPERATION,
    ):
        self.operations = operations
        self.size = size

    def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
        full_rowlist: list[RowList] = []
        for definition in self.operations:
            for i, rowlist in enumerate(definition.generate(fields)):
                full_rowlist.append(rowlist)
                if i + 1 == self.size.value:
                    yield Transaction(full_rowlist)
                    full_rowlist = []
        if full_rowlist:
            yield Transaction(full_rowlist)


class RestartMz(TransactionDef):
    composition: Composition
    probability: float

    def __init__(self, composition: Composition, probability: float):
        self.composition = composition
        self.probability = probability

    def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
        if random.random() < self.probability:
            self.composition.kill("materialized")
            time.sleep(1)
            self.composition.up("materialized")
        yield None

Classes

class RestartMz (composition: Composition, probability: float)
Expand source code Browse git
class RestartMz(TransactionDef):
    composition: Composition
    probability: float

    def __init__(self, composition: Composition, probability: float):
        self.composition = composition
        self.probability = probability

    def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
        if random.random() < self.probability:
            self.composition.kill("materialized")
            time.sleep(1)
            self.composition.up("materialized")
        yield None

Ancestors

Class variables

var compositionComposition
var probability : float

Methods

def generate(self, fields: list[Field]) ‑> collections.abc.Iterator[Transaction | None]
Expand source code Browse git
def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
    if random.random() < self.probability:
        self.composition.kill("materialized")
        time.sleep(1)
        self.composition.up("materialized")
    yield None
class TransactionDef (operations: list[Definition], size: TransactionSize = TransactionSize.SINGLE_OPERATION)
Expand source code Browse git
class TransactionDef:
    operations: list[Definition]
    size: TransactionSize

    def __init__(
        self,
        operations: list[Definition],
        size: TransactionSize = TransactionSize.SINGLE_OPERATION,
    ):
        self.operations = operations
        self.size = size

    def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
        full_rowlist: list[RowList] = []
        for definition in self.operations:
            for i, rowlist in enumerate(definition.generate(fields)):
                full_rowlist.append(rowlist)
                if i + 1 == self.size.value:
                    yield Transaction(full_rowlist)
                    full_rowlist = []
        if full_rowlist:
            yield Transaction(full_rowlist)

Subclasses

Class variables

var operations : list[Definition]
var sizeTransactionSize

Methods

def generate(self, fields: list[Field]) ‑> collections.abc.Iterator[Transaction | None]
Expand source code Browse git
def generate(self, fields: list[Field]) -> Iterator[Transaction | None]:
    full_rowlist: list[RowList] = []
    for definition in self.operations:
        for i, rowlist in enumerate(definition.generate(fields)):
            full_rowlist.append(rowlist)
            if i + 1 == self.size.value:
                yield Transaction(full_rowlist)
                full_rowlist = []
    if full_rowlist:
        yield Transaction(full_rowlist)
class TransactionSize (*args, **kwds)

Create a collection of name/value pairs.

Example enumeration:

>>> class Color(Enum):
...     RED = 1
...     BLUE = 2
...     GREEN = 3

Access them by:

  • attribute access::
>>> Color.RED
<Color.RED: 1>
  • value lookup:
>>> Color(1)
<Color.RED: 1>
  • name lookup:
>>> Color['RED']
<Color.RED: 1>

Enumerations can be iterated over, and know how many members they have:

>>> len(Color)
3
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Methods can be added to enumerations, and members can have their own attributes – see the documentation for details.

Expand source code Browse git
class TransactionSize(Enum):
    SINGLE_OPERATION = 1
    HUGE = 1_000_000_000

Ancestors

  • enum.Enum

Class variables

var HUGE
var SINGLE_OPERATION