Skip to content

Commit

Permalink
Blob tag filter
Browse files Browse the repository at this point in the history
  • Loading branch information
EmmaZhu committed Nov 29, 2023
1 parent e906560 commit 7a97c42
Show file tree
Hide file tree
Showing 18 changed files with 515 additions and 384 deletions.
105 changes: 82 additions & 23 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,22 @@
"request": "launch",
"name": "Azurite Service - Loki",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${workspaceFolder}/src/azurite.ts", "-d", "debug.log"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/azurite.ts",
"-d",
"debug.log"
],
"env": {
"AZURITE_ACCOUNTS": ""
},
"skipFiles": ["node_modules/*/**", "<node_internals>/*/**"],
"skipFiles": [
"node_modules/*/**",
"<node_internals>/*/**"
],
"outputCapture": "std"
},
{
Expand All @@ -35,8 +45,16 @@
"request": "launch",
"name": "Azurite Service - Loki, Loose",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${workspaceFolder}/src/azurite.ts", "-d", "debug.log", "-L"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/azurite.ts",
"-d",
"debug.log",
"-L"
],
"env": {
"AZURITE_ACCOUNTS": ""
},
Expand All @@ -47,7 +65,10 @@
"request": "launch",
"name": "Azurite Service - Loki, Loose, HTTPS, OAuth",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/azurite.ts",
"-L",
Expand All @@ -70,7 +91,10 @@
"request": "launch",
"name": "Azurite Queue Service - Loki, HTTPS, OAuth",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/queue/main.ts",
"-d",
Expand All @@ -92,7 +116,10 @@
"request": "launch",
"name": "Azurite Blob Service - Loki, HTTPS, OAuth",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/blob/main.ts",
"-d",
Expand All @@ -114,8 +141,15 @@
"request": "launch",
"name": "Azurite Blob Service - SQL",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${workspaceFolder}/src/blob/main.ts", "-d", "debug.log"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/blob/main.ts",
"-d",
"debug.log"
],
"env": {
"AZURITE_DB": "mysql://root:[email protected]:3306/azurite_blob",
"AZURITE_ACCOUNTS": ""
Expand All @@ -127,8 +161,15 @@
"request": "launch",
"name": "Azurite Table Service - Loki",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${workspaceFolder}/src/table/main.ts", "-d", "debug.log"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/src/table/main.ts",
"-d",
"debug.log"
],
"env": {
"AZURITE_ACCOUNTS": ""
},
Expand All @@ -139,16 +180,24 @@
"request": "launch",
"name": "Current TS File",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"args": ["${workspaceFolder}/${relativeFile}"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/${relativeFile}"
],
"outputCapture": "std"
},
{
"type": "node",
"request": "launch",
"name": "Current Mocha TS File - Loki",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/node_modules/mocha/bin/_mocha",
"-u",
Expand All @@ -162,7 +211,7 @@
"AZURITE_ACCOUNTS": "",
"AZURE_TABLE_STORAGE": "",
"DATATABLES_ACCOUNT_NAME": "<name of your storage account>",
"DATATABLES_ACCOUNT_KEY" : "<account key for your storage account>",
"DATATABLES_ACCOUNT_KEY": "<account key for your storage account>",
"AZURE_DATATABLES_STORAGE_STRING": "https://<your account name>.table.core.windows.net",
"AZURE_DATATABLES_SAS": "?<sas query string>",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
Expand All @@ -175,15 +224,18 @@
"request": "launch",
"name": "EXE Mocha TS File - Loki",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/node_modules/mocha/bin/_mocha",
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"${workspaceFolder}/tests/exe.test.ts",
"${workspaceFolder}/tests/exe.test.ts",
"--exit"
],
"env": {
Expand All @@ -199,7 +251,10 @@
"request": "launch",
"name": "Current Mocha TS File - SQL",
"cwd": "${workspaceFolder}",
"runtimeArgs": ["-r", "ts-node/register"],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"args": [
"${workspaceFolder}/node_modules/mocha/bin/_mocha",
"-u",
Expand All @@ -211,7 +266,7 @@
],
"env": {
"AZURITE_ACCOUNTS": "",
"AZURITE_TEST_DB": "mysql://root:my-secret-pw@127.0.0.1:3306/azurite_blob_test",
"AZURITE_TEST_DB": "mysql://root:!!123abc@127.0.0.1:3306/azurite_blob",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
},
"internalConsoleOptions": "openOnSessionStart",
Expand Down Expand Up @@ -250,9 +305,13 @@
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": ["--extensionDevelopmentPath=${workspaceFolder}"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
],
"preLaunchTask": "npm: watch"
}
]
}
}
124 changes: 61 additions & 63 deletions src/blob/handlers/BlobHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,39 +122,39 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {

const response: Models.BlobGetPropertiesResponse = againstMetadata
? {
statusCode: 200,
metadata: res.metadata,
eTag: res.properties.etag,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
clientRequestId: options.requestId,
contentLength: res.properties.contentLength,
lastModified: res.properties.lastModified
}
statusCode: 200,
metadata: res.metadata,
eTag: res.properties.etag,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
clientRequestId: options.requestId,
contentLength: res.properties.contentLength,
lastModified: res.properties.lastModified
}
: {
statusCode: 200,
metadata: res.metadata,
isIncrementalCopy: res.properties.incrementalCopy,
eTag: res.properties.etag,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
acceptRanges: "bytes",
blobCommittedBlockCount:
res.properties.blobType === Models.BlobType.AppendBlob
? res.blobCommittedBlockCount
: undefined,
isServerEncrypted: true,
clientRequestId: options.requestId,
...res.properties,
cacheControl: context.request!.getQuery("rscc") ?? res.properties.cacheControl,
contentDisposition: context.request!.getQuery("rscd") ?? res.properties.contentDisposition,
contentEncoding: context.request!.getQuery("rsce") ?? res.properties.contentEncoding,
contentLanguage: context.request!.getQuery("rscl") ?? res.properties.contentLanguage,
contentType: context.request!.getQuery("rsct") ?? res.properties.contentType,
tagCount: res.properties.tagCount,
};
statusCode: 200,
metadata: res.metadata,
isIncrementalCopy: res.properties.incrementalCopy,
eTag: res.properties.etag,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
acceptRanges: "bytes",
blobCommittedBlockCount:
res.properties.blobType === Models.BlobType.AppendBlob
? res.blobCommittedBlockCount
: undefined,
isServerEncrypted: true,
clientRequestId: options.requestId,
...res.properties,
cacheControl: context.request!.getQuery("rscc") ?? res.properties.cacheControl,
contentDisposition: context.request!.getQuery("rscd") ?? res.properties.contentDisposition,
contentEncoding: context.request!.getQuery("rsce") ?? res.properties.contentEncoding,
contentLanguage: context.request!.getQuery("rscl") ?? res.properties.contentLanguage,
contentType: context.request!.getQuery("rsct") ?? res.properties.contentType,
tagCount: res.properties.tagCount,
};

return response;
}
Expand Down Expand Up @@ -329,12 +329,10 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
const metadata = convertRawHeadersToMetadata(
blobCtx.request!.getRawHeaders()
);

if (metadata != undefined)
{

if (metadata != undefined) {
Object.entries(metadata).forEach(([key, value]) => {
if (key.includes("-"))
{
if (key.includes("-")) {
throw StorageErrorFactory.getInvalidMetadata(context.contextId!);
}
});
Expand Down Expand Up @@ -1103,7 +1101,7 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
tagCount: getBlobTagsCount(blob.blobTags),
isServerEncrypted: true,
clientRequestId: options.requestId,
creationTime:blob.properties.creationTime,
creationTime: blob.properties.creationTime,
blobCommittedBlockCount:
blob.properties.blobType === Models.BlobType.AppendBlob
? (blob.committedBlocksInOrder || []).length
Expand Down Expand Up @@ -1176,9 +1174,9 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
contentLength <= 0
? []
: this.rangesManager.fillZeroRanges(blob.pageRangesInOrder, {
start: rangeStart,
end: rangeEnd
});
start: rangeStart,
end: rangeEnd
});

const bodyGetter = async () => {
return this.extentStore.readExtents(
Expand Down Expand Up @@ -1233,7 +1231,7 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
blobContentMD5: blob.properties.contentMD5,
tagCount: getBlobTagsCount(blob.blobTags),
isServerEncrypted: true,
creationTime:blob.properties.creationTime,
creationTime: blob.properties.creationTime,
clientRequestId: options.requestId
};

Expand All @@ -1243,7 +1241,7 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
public async query(
options: Models.BlobQueryOptionalParams,
context: Context
): Promise<Models.BlobQueryResponse>{
): Promise<Models.BlobQueryResponse> {
throw new NotImplementedError(context.contextId);
}

Expand All @@ -1266,13 +1264,13 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
);

const response: Models.BlobGetTagsResponse = {
statusCode: 200,
blobTagSet: tags === undefined ? []: tags.blobTagSet,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
clientRequestId: options.requestId,
};
statusCode: 200,
blobTagSet: tags === undefined ? [] : tags.blobTagSet,
requestId: context.contextId,
version: BLOB_API_VERSION,
date: context.startTime,
clientRequestId: options.requestId,
};

return response;
}
Expand Down Expand Up @@ -1315,18 +1313,18 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler {
return response;
}

private NewUriFromCopySource(copySource: string, context: Context): URL{
try{
return new URL(copySource)
}
catch
{
throw StorageErrorFactory.getInvalidHeaderValue(
context.contextId,
{
HeaderName: "x-ms-copy-source",
HeaderValue: copySource
})
}
private NewUriFromCopySource(copySource: string, context: Context): URL {
try {
return new URL(copySource)
}
catch
{
throw StorageErrorFactory.getInvalidHeaderValue(
context.contextId,
{
HeaderName: "x-ms-copy-source",
HeaderValue: copySource
})
}
}
}
Loading

0 comments on commit 7a97c42

Please sign in to comment.