mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-17 04:18:07 +00:00
Add support for sharding across multiple storage accounts for blob containers used for corpus management. Things to note: 1. Additional storage accounts must be in the same resource group, support the "blob" endpoint, and have the tag `storage_type` with the value `corpus`. A utility is provided (`src/utils/add-corpus-storage-accounts`), which adds storage accounts. 2. If any secondary storage accounts exist, they are used by default for containers. 3. Storage account names are cached in memory the Azure Function instance forever. Upon adding new storage accounts, the app needs to be restarted to pick up the new accounts.
31 lines
850 B
Python
31 lines
850 B
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
import logging
|
|
import os
|
|
from typing import Optional
|
|
|
|
from azure.cosmosdb.table import TableService
|
|
from memoization import cached
|
|
|
|
from .storage import get_storage_account_name_key
|
|
|
|
|
|
@cached(ttl=60)
|
|
def get_client(
|
|
table: Optional[str] = None, account_id: Optional[str] = None
|
|
) -> TableService:
|
|
if account_id is None:
|
|
account_id = os.environ["ONEFUZZ_FUNC_STORAGE"]
|
|
|
|
logging.debug("getting table account: (account_id: %s)", account_id)
|
|
name, key = get_storage_account_name_key(account_id)
|
|
client = TableService(account_name=name, account_key=key)
|
|
|
|
if table and not client.exists(table):
|
|
logging.info("creating missing table %s", table)
|
|
client.create_table(table, fail_on_exist=False)
|
|
return client
|