From ad6fe93ab617799dcc06ba25e2928806afb61f67 Mon Sep 17 00:00:00 2001 From: tamireran Date: Wed, 27 Apr 2016 16:21:09 +0300 Subject: [PATCH 1/4] Noobaa to NooBaa --- .../management/about-form/about-form.html | 4 ++-- .../create-account-wizard/create-account-wizard.js | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/components/management/about-form/about-form.html b/frontend/src/app/components/management/about-form/about-form.html index 4279310ba2..4635c1ba68 100644 --- a/frontend/src/app/components/management/about-form/about-form.html +++ b/frontend/src/app/components/management/about-form/about-form.html @@ -1,7 +1,7 @@ -

Noobaa Storage Solution

+

NooBaa Storage Solution

- Current Version: + Current Version:

diff --git a/frontend/src/app/components/management/create-account-wizard/create-account-wizard.js b/frontend/src/app/components/management/create-account-wizard/create-account-wizard.js index 9768606735..7ce19509b2 100644 --- a/frontend/src/app/components/management/create-account-wizard/create-account-wizard.js +++ b/frontend/src/app/components/management/create-account-wizard/create-account-wizard.js @@ -8,7 +8,7 @@ import { loadBucketList, createAccount } from 'actions'; function makeUserMessage(loginInfo, S3AccessInfo) { return ` -

Hi, I created a noobaa user for you:

+

Hi, I created a NooBaa user for you:

${makeLoginMessage(loginInfo)}
${S3AccessInfo ? makeS3AccessMessage(S3AccessInfo) : ''} `; @@ -42,7 +42,7 @@ class CreateAccountWizardViewModel { this.detailsStepTemplate = detailsStepTemplate; this.emailAddress = ko.observable() - .extend({ + .extend({ required: { message: 'Please enter an email address' }, email: { message: 'Please enter a valid email address' }, notIn: { @@ -91,7 +91,7 @@ class CreateAccountWizardViewModel { validateStep(step) { switch (step) { - case 1: + case 1: if (this.nameAndPermissionsErrors().length > 0) { this.nameAndPermissionsErrors.showAllMessages(); return false; @@ -119,9 +119,9 @@ class CreateAccountWizardViewModel { create() { createAccount( - systemInfo().name, - this.emailAddress(), - this.password, + systemInfo().name, + this.emailAddress(), + this.password, this.accessKeys, this.enableS3Access() ? this.selectedBuckets() : undefined ); @@ -139,4 +139,4 @@ class CreateAccountWizardViewModel { export default { viewModel: CreateAccountWizardViewModel, template: template -}; \ No newline at end of file +}; From b0bf5258f0cd4ada95b8fe61e92c1ce13e540166 Mon Sep 17 00:00:00 2001 From: tamireran Date: Thu, 28 Apr 2016 11:58:03 +0300 Subject: [PATCH 2/4] support _$folder$ in delete object (s3) --- src/s3/s3_controller.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/s3/s3_controller.js b/src/s3/s3_controller.js index 3d6fb93807..376d07efc3 100755 --- a/src/s3/s3_controller.js +++ b/src/s3/s3_controller.js @@ -479,10 +479,7 @@ class S3Controller { * http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html */ delete_object(req) { - return req.rpc_client.object.delete_object({ - bucket: req.params.bucket, - key: req.params.key - }); + return req.rpc_client.object.delete_object(this._object_path(req)); } From 6f0f47255eea3ee8ba719c58474a7825fa6a1527 Mon Sep 17 00:00:00 2001 From: tamireran Date: Thu, 28 Apr 2016 12:52:41 +0300 Subject: [PATCH 3/4] TEMP! delete object in case of error while uploading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since we don’t have recover from write first block, we fail easily. We must solve it soon. For now, we will have this patch. Fuse in such case, can’t handle the response we send and we are stuck with zero size object with no parts. deleting the object allows better recovery in this case. --- src/api/object_io.js | 15 ++++++++++++--- src/server/object_server.js | 4 ++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/api/object_io.js b/src/api/object_io.js index 3787812910..51f329e779 100644 --- a/src/api/object_io.js +++ b/src/api/object_io.js @@ -173,7 +173,17 @@ class ObjectIO { .return(md5_digest); }, err => { dbg.log0('upload_stream: error write stream', params.key, err); - throw err; + return params.client.object.delete_object(_.pick(params, + 'bucket', + 'key')) + .then(() => { + dbg.log0('removed partial object', params.key, 'from bucket', params.bucket); + throw err; + }) + .fail(() => { + throw err; + }); + }); } @@ -286,8 +296,7 @@ class ObjectIO { return pipeline.run() .then(() => { var sha256_promise = ''; - if(params.calculate_sha256) - { + if (params.calculate_sha256) { sha256_promise = P.resolve(sha256_stream && sha256_stream.wait_digest()); } return P.all([P.resolve(md5_stream && md5_stream.wait_digest()), sha256_promise]) diff --git a/src/server/object_server.js b/src/server/object_server.js index 3e532074a8..25b46cbff6 100644 --- a/src/server/object_server.js +++ b/src/server/object_server.js @@ -153,6 +153,10 @@ function complete_object_upload(req) { dbg.log0('aggregated_md5', obj_etag); return map_writer.fix_multipart_parts(obj); }); + }else + { + dbg.log0('complete_object_upload no fix for',obj); + return obj.size; } }) .then(object_size => { From c056dbf17fc49a4174eeb8d5af2222de33a3022a Mon Sep 17 00:00:00 2001 From: tamireran Date: Thu, 28 Apr 2016 12:52:51 +0300 Subject: [PATCH 4/4] clean debug message --- src/server/node_monitor.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/node_monitor.js b/src/server/node_monitor.js index b8ffcfe796..88bbbdd9a4 100644 --- a/src/server/node_monitor.js +++ b/src/server/node_monitor.js @@ -270,7 +270,6 @@ function update_heartbeat(req, reply_token) { ]) .spread(function(node_arg, storage_used) { node = node_arg; - dbg.log0('ETET:storage_used', storage_used); if (!node) { // we don't fail here because failures would keep retrying // to find this node, and the node is not in the db. @@ -475,7 +474,7 @@ function collect_agent_diagnostics(req) { } function set_debug_node(req) { - var target = req.rpc_params.target; + var target = req.rpc_params.target; return P.fcall(function() { return server_rpc.client.agent.set_debug_node({ level: req.rpc_params.level @@ -545,4 +544,4 @@ function _resync_agents() { throw new Error('Failed resyncing agents to redirector'); }); }); -} \ No newline at end of file +}