Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ When reviewing pull requests in this repository, check the following areas:
| ---- | ------------- |
| Async error handling | Uncaught promise rejections, missing error callbacks, swallowed errors in streams, missing `.on('error')` handlers |
| Stream handling | Backpressure issues, proper cleanup on error, no leaked file descriptors, correct use of transform/pipeline |
| Dependency pinning | Git-based deps (`arsenal`, `vaultclient`, `bucketclient`, `werelogs`, `httpagent`) must pin to a tag, not a branch |
| Dependency pinning | Scality deps (`@scality/arsenal`, `vaultclient`, `bucketclient`, `werelogs`, `httpagent`) must pin to a released version or tag, never a branch |
| Logging | Proper use of `werelogs` — no `console.log` in production code, log levels match severity |
| Async/await usage | Prefer `async`/`await` over raw promise chains (`.then`/`.catch`) and callbacks for new code; ensure `await` is not missing on async calls |
| Import placement | All `require()` statements must be at the top of the file, never inside functions, blocks, or `describe` scopes |
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Many scripts are also designed to run inside Docker containers with proper netwo
- **Runtime:** Node.js 24+
- **AWS SDK:** v3 (client-s3, smithy packages)
- **Scality Libraries:**
- `arsenal`: Core S3 data models and utilities
- `@scality/arsenal`: Core S3 data models and utilities
- `bucketclient`: Bucket metadata client
- `vaultclient`: Authentication service client
- `werelogs`: Structured logging
Expand Down
2 changes: 1 addition & 1 deletion CRR/ReplicationStatusUpdater.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const crypto = require('crypto');
const {
doWhilst, eachSeries, eachLimit, waterfall,
} = require('async');
const { ObjectMD, ReplicationConfiguration } = require('arsenal').models;
const { ObjectMD, ReplicationConfiguration } = require('@scality/arsenal').models;
const {
ListObjectVersionsCommand,
GetBucketReplicationCommand
Expand Down
2 changes: 1 addition & 1 deletion CompareRaftMembers/BucketStream.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const http = require('http');
const { http: httpArsn } = require('httpagent');
const stream = require('stream');

const { versioning } = require('arsenal');
const { versioning } = require('@scality/arsenal');

const httpAgent = new httpArsn.Agent({
keepAlive: true,
Expand Down
2 changes: 1 addition & 1 deletion CompareRaftMembers/KeyValueStreamDiff.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const async = require('async');
const stream = require('stream');

const { jsutil } = require('arsenal');
const { jsutil } = require('@scality/arsenal');

/**
* Output differences between two streams, where each stream emits
Expand Down
2 changes: 1 addition & 1 deletion CompareRaftMembers/RepairObjects/getRepairStrategy.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { versioning } = require('arsenal');
const { versioning } = require('@scality/arsenal');

const VID_SEP = versioning.VersioningConstants.VersionId.Separator;

Expand Down
2 changes: 1 addition & 1 deletion CompareRaftMembers/repairObjects.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const jsonStream = require('JSONStream');
const { http: httpArsn } = require('httpagent');

const { Logger } = require('werelogs');
const { jsutil, errors, versioning } = require('arsenal');
const { jsutil, errors, versioning } = require('@scality/arsenal');

const getBucketdURL = require('../VerifyBucketSproxydKeys/getBucketdURL');
const getRepairStrategy = require('./RepairObjects/getRepairStrategy');
Expand Down
2 changes: 1 addition & 1 deletion CountItems/CountManager.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const async = require('async');
const { once } = require('arsenal').jsutil;
const { once } = require('@scality/arsenal').jsutil;
const { validStorageMetricLevels } = require('./utils/constants');
const { consolidateDataMetrics } = require('./utils/utils');
const monitoring = require('../utils/monitoring');
Expand Down
2 changes: 1 addition & 1 deletion CountItems/CountMaster.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const async = require('async');
const { reshapeExceptionError } = require('arsenal').errorUtils;
const { reshapeExceptionError } = require('@scality/arsenal').errorUtils;

class CountMaster {
constructor(params) {
Expand Down
2 changes: 1 addition & 1 deletion CountItems/CountWorker.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const assert = require('assert');
const async = require('async');
const { BucketInfo } = require('arsenal').models;
const { BucketInfo } = require('@scality/arsenal').models;
const monitoring = require('../utils/monitoring');
const { deserializeBigInts, serializeBigInts } = require('./utils/utils');

Expand Down
2 changes: 1 addition & 1 deletion CountItems/CountWorkerObj.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { v4: uuid } = require('uuid');
const { once } = require('arsenal').jsutil;
const { once } = require('@scality/arsenal').jsutil;
const { deserializeBigInts, serializeBigInts } = require('./utils/utils');

class CountWorkerObj {
Expand Down
4 changes: 2 additions & 2 deletions CountItems/masterProcess.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const werelogs = require('werelogs');
const { network } = require('arsenal');
const { reshapeExceptionError } = require('arsenal').errorUtils;
const { network } = require('@scality/arsenal');
const { reshapeExceptionError } = require('@scality/arsenal').errorUtils;
const S3UtilsMongoClient = require('../utils/S3UtilsMongoClient');

const CountMaster = require('./CountMaster');
Expand Down
2 changes: 1 addition & 1 deletion CountItems/workerProcess.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const werelogs = require('werelogs');
const { reshapeExceptionError } = require('arsenal').errorUtils;
const { reshapeExceptionError } = require('@scality/arsenal').errorUtils;
const S3UtilsMongoClient = require('../utils/S3UtilsMongoClient');

const CountWorker = require('./CountWorker');
Expand Down
2 changes: 1 addition & 1 deletion ObjectRepair/DuplicateKeysIngestion.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { waterfall } = require('async');
const { Logger } = require('werelogs');
const { errors } = require('arsenal');
const { errors } = require('@scality/arsenal');
const { httpRequest } = require('../repairDuplicateVersionsSuite');
const { SproxydKeysProcessor } = require('./DuplicateKeysWindow');
const { ProxyLoggerCreator, AggregateLogger } = require('./Logging');
Expand Down
4 changes: 2 additions & 2 deletions StalledRetry/CursorWrapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ const { MongoError } = require('mongodb');
const {
isMasterKey,
VersionID: { encode },
} = require('arsenal').versioning;
const { once } = require('arsenal').jsutil;
} = require('@scality/arsenal').versioning;
const { once } = require('@scality/arsenal').jsutil;

class StalledEntry {
constructor(bucketName, key, versionId, storageClass, forceRetry) {
Expand Down
2 changes: 1 addition & 1 deletion StalledRetry/MongoClientInterfaceStalled.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const async = require('async');

const {
MongoClientInterface,
} = require('arsenal').storage.metadata.mongoclient;
} = require('@scality/arsenal').storage.metadata.mongoclient;

class MongoClientInterfaceStalled extends MongoClientInterface {
constructor(params) {
Expand Down
2 changes: 1 addition & 1 deletion StalledRetry/StalledRequestHandler.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const async = require('async');
const { jsutil } = require('arsenal');
const { jsutil } = require('@scality/arsenal');

class StalledRequestHandler {
constructor(client, params) {
Expand Down
2 changes: 1 addition & 1 deletion cleanupNoncurrentVersions.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const fs = require('fs');
const { http, https } = require('httpagent');
const { ObjectMD } = require('arsenal').models;
const { ObjectMD } = require('@scality/arsenal').models;

const { S3Client, ListObjectVersionsCommand, DeleteObjectsCommand } = require('@aws-sdk/client-s3');
const { NodeHttpHandler } = require('@aws-sdk/node-http-handler');
Expand Down
2 changes: 1 addition & 1 deletion compareBuckets/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const async = require('async');
const { URL } = require('url');
const { http: httpArsn } = require('httpagent');

const { jsutil } = require('arsenal');
const { jsutil } = require('@scality/arsenal');

const httpAgent = new httpArsn.Agent({
keepAlive: true,
Expand Down
16 changes: 6 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "s3utils",
"version": "1.19.2",
"name": "@scality/s3utils",
"version": "1.20.0-preview.1",
"engines": {
"node": ">= 24"
},
Expand Down Expand Up @@ -29,31 +29,27 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.873.0",
"@aws-sdk/node-http-handler": "^3.374.0",
"@scality/arsenal": "^8.6.0-0",
"@scality/cloudserverclient": "^1.0.8",
"@senx/warp10": "^2.0.3",
"@smithy/util-retry": "^4.0.7",
"JSONStream": "^1.3.5",
"arsenal": "git+https://github.com/scality/arsenal#8.5.0",
"async": "^3.2.6",
"bucketclient": "scality/bucketclient#8.2.10",
"bucketclient": "scality/bucketclient#8.3.0",
"express": "^5.1.0",
"heapdump": "^0.3.15",
"httpagent": "git+https://github.com/scality/httpagent#1.1.0",
"httpagent": "scality/httpagent#1.1.0",
"level": "^9.0.0",
"mongodb": "^6.17.0",
"needle": "^3.3.1",
"node-rdkafka": "^3.6.1",
"node-schedule": "^2.1.1",
"prom-client": "^15.1.3",
"uuid": "^11.0.3",
"vaultclient": "scality/vaultclient#8.5.1",
"werelogs": "scality/werelogs#semver:^8.2.4",
"xml2js": "^0.6.2"
},
"resolutions": {
"ioctl": "2.0.2",
"jsprim": "1.4.2",
"string-width": "4.2.3"
},
"devDependencies": {
"@aws-sdk/client-iam": "^3.962.0",
"@scality/eslint-config-scality": "scality/Guidelines#8.3.0",
Expand Down
2 changes: 1 addition & 1 deletion repairDuplicateVersionsSuite.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const { http: httpArsn, https: httpsArsn } = require('httpagent');
const { URL } = require('url');
const readline = require('readline');

const { jsutil, errors } = require('arsenal');
const { jsutil, errors } = require('@scality/arsenal');
const { Logger } = require('werelogs');

const {
Expand Down
4 changes: 2 additions & 2 deletions requeueFailedCRRCronJob.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const { http: httpArsn } = require('httpagent');
const { Producer } = require('node-rdkafka');
const { scheduleJob } = require('node-schedule');

const { errors } = require('arsenal');
const VID_SEP = require('arsenal').versioning.VersioningConstants
const { errors } = require('@scality/arsenal');
const VID_SEP = require('@scality/arsenal').versioning.VersioningConstants
.VersionId.Separator;
const { Logger } = require('werelogs');

Expand Down
2 changes: 1 addition & 1 deletion service-level-sidecar/bucketd.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const arsenal = require('arsenal');
const arsenal = require('@scality/arsenal');
const bucketclient = require('bucketclient');

const { BucketClientInterface } = arsenal.storage.metadata.bucketclient;
Expand Down
2 changes: 1 addition & 1 deletion service-level-sidecar/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node

const os = require('os');
const { jsutil } = require('arsenal');
const { jsutil } = require('@scality/arsenal');

const { startServer } = require('./server');
const log = require('./log');
Expand Down
2 changes: 1 addition & 1 deletion service-level-sidecar/report.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const async = require('async');
const util = require('util');

const arsenal = require('arsenal');
const arsenal = require('@scality/arsenal');

const { splitter } = arsenal.constants;

Expand Down
2 changes: 1 addition & 1 deletion service-level-sidecar/scuba.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const arsenal = require('arsenal');
const arsenal = require('@scality/arsenal');
const bucketclient = require('bucketclient');

const { BucketClientInterface } = arsenal.storage.metadata.bucketclient;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const async = require('async');
const werelogs = require('werelogs');
const assert = require('assert');
const { constants } = require('arsenal');
const { constants } = require('@scality/arsenal');
const S3UtilsMongoClient = require('../../utils/S3UtilsMongoClient');
const { testBucketMD, testBucketCreationDate, testUserBucketInfo } = require('../constants');
const { collectBucketMetricsAndUpdateBucketCapacityInfo } = require('../../DataReport/collectBucketMetricsAndUpdateBucketCapacityInfo');
Expand Down
4 changes: 2 additions & 2 deletions tests/functional/countItems.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const cluster = require('cluster');
const async = require('async');
const werelogs = require('werelogs');
const { BucketInfo, ObjectMD } = require('arsenal').models;
const { constants } = require('arsenal');
const { BucketInfo, ObjectMD } = require('@scality/arsenal').models;
const { constants } = require('@scality/arsenal');
const S3UtilsMongoClient = require('../../utils/S3UtilsMongoClient');
const CountMaster = require('../../CountItems/CountMaster');
const CountManager = require('../../CountItems/CountManager');
Expand Down
2 changes: 1 addition & 1 deletion tests/functional/stalled.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const async = require('async');
const werelogs = require('werelogs');
const { BucketInfo, ObjectMD } = require('arsenal').models;
const { BucketInfo, ObjectMD } = require('@scality/arsenal').models;

const {
MongoClientInterfaceStalled,
Expand Down
6 changes: 3 additions & 3 deletions tests/functional/utils/S3UtilsMongoClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ const util = require('util');
const async = require('async');
const assert = require('assert');
const werelogs = require('werelogs');
const { BucketInfo } = require('arsenal').models;
const { versioning, constants } = require('arsenal');
const { BucketInfo } = require('@scality/arsenal').models;
const { versioning, constants } = require('@scality/arsenal');

const { MongoMemoryReplSet } = require('mongodb-memory-server');
const { ObjectMDArchive } = require('arsenal/build/lib/models');
const { ObjectMDArchive } = require('@scality/arsenal/build/lib/models');
const S3UtilsMongoClient = require('../../../utils/S3UtilsMongoClient');
const { mongoMemoryServerParams, createMongoParamsFromMongoMemoryRepl } = require('../../utils/mongoUtils');
const {
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/CRR/ReplicationStatusUpdater.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const werelogs = require('werelogs');
const assert = require('assert');
const { models } = require('arsenal');
const { models } = require('@scality/arsenal');

const {
initializeCrrWithMocks,
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/CompareRaftMembers/BucketStream.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const http = require('http');

const { versioning } = require('arsenal');
const { versioning } = require('@scality/arsenal');

const BucketStream = require('../../../CompareRaftMembers/BucketStream');

Expand Down
2 changes: 1 addition & 1 deletion tests/unit/CompareRaftMembers/DBListStream.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const assert = require('assert');
const stream = require('stream');

const { versioning } = require('arsenal');
const { versioning } = require('@scality/arsenal');

const DBListStream = require('../../../CompareRaftMembers/DBListStream');

Expand Down
2 changes: 1 addition & 1 deletion tests/unit/CompareRaftMembers/DiffStreamOplogFilter.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const http = require('http');
const stream = require('stream');

const { shuffle } = require('arsenal');
const { shuffle } = require('@scality/arsenal');

const DiffStreamOplogFilter = require('../../../CompareRaftMembers/DiffStreamOplogFilter');

Expand Down
2 changes: 1 addition & 1 deletion tests/unit/CountItems/CountManager.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { BucketInfo } = require('arsenal').models;
const { BucketInfo } = require('@scality/arsenal').models;

const CountManager = require('../../../CountItems/CountManager');

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { BucketInfo } = require('arsenal').models;
const { BucketInfo } = require('@scality/arsenal').models;
const werelogs = require('werelogs');

const { testBucketMD } = require('../../constants');
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/SproxydKeysScan/DuplicateKeysIngestionTest.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs');
const { errors } = require('arsenal');
const { errors } = require('@scality/arsenal');
const { RaftJournalReader } = require('../../../ObjectRepair/DuplicateKeysIngestion');
const { subscribers } = require('../../../ObjectRepair/SproxydKeysSubscribers');

Expand Down
4 changes: 2 additions & 2 deletions tests/unit/utils/S3UtilsMongoClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ const async = require('async');
const util = require('util');
const assert = require('assert');
const werelogs = require('werelogs');
const { BucketInfo, ObjectMD, ObjectMDArchive } = require('arsenal').models;
const { BucketInfo, ObjectMD, ObjectMDArchive } = require('@scality/arsenal').models;
const { MongoMemoryReplSet } = require('mongodb-memory-server');
const { Long } = require('mongodb');
const { constants, errors } = require('arsenal');
const { constants, errors } = require('@scality/arsenal');
const S3UtilsMongoClient = require('../../../utils/S3UtilsMongoClient');
const {
mongoMemoryServerParams,
Expand Down
4 changes: 2 additions & 2 deletions tests/utils/index.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
const { ObjectMD } = require('arsenal').models;
const { ObjectMD } = require('@scality/arsenal').models;
const {
VersionID: { encode },
VersioningConstants,
} = require('arsenal').versioning;
} = require('@scality/arsenal').versioning;

const { StalledEntry } = require('../../StalledRetry/CursorWrapper');

Expand Down
4 changes: 2 additions & 2 deletions utils/S3UtilsMongoClient.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { MongoClientInterface } = require('arsenal').storage.metadata.mongoclient;
const { MongoClientInterface } = require('@scality/arsenal').storage.metadata.mongoclient;
const { Long } = require('mongodb');
const { errors, constants } = require('arsenal');
const { errors, constants } = require('@scality/arsenal');
const async = require('async');
const { promisify } = require('util');
const { validStorageMetricLevels } = require('../CountItems/utils/constants');
Expand Down
2 changes: 1 addition & 1 deletion utils/monitoring.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { errors } = require('arsenal');
const { errors } = require('@scality/arsenal');
const promClient = require('prom-client');
const { http } = require('httpagent');
const cluster = require('cluster');
Expand Down
2 changes: 1 addition & 1 deletion verifyBucketSproxydKeys.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const async = require('async');
const { URL } = require('url');
const jsonStream = require('JSONStream');

const { jsutil, versioning } = require('arsenal');
const { jsutil, versioning } = require('@scality/arsenal');
const { Logger } = require('werelogs');

const getObjectURL = require('./VerifyBucketSproxydKeys/getObjectURL');
Expand Down
Loading
Loading