@@ -90,6 +90,28 @@ void Ioctx::Init(Handle<Object> target) {
90
90
NanNew<FunctionTemplate>(constructor)->GetFunction ());
91
91
}
92
92
93
+ bool Rados::verify_ioctx_required () {
94
+ if ( this ->state == 3 ) {
95
+ return true ;
96
+ } else {
97
+ NanThrowError (" Cluster not connected" );
98
+ return false ;
99
+ }
100
+ }
101
+
102
+ bool Ioctx::verify_required () {
103
+ if ( this ->rados ->verify_ioctx_required () ) {
104
+ if ( this ->state == 1 ) {
105
+ return true ;
106
+ } else {
107
+ NanThrowError (" Ioctx not initialized" );
108
+ return false ;
109
+ }
110
+ } else {
111
+ return false ;
112
+ }
113
+ }
114
+
93
115
94
116
NAN_METHOD (Rados::New) {
95
117
NanScope ();
@@ -110,9 +132,11 @@ NAN_METHOD(Rados::New) {
110
132
if ( rados_create2 (&obj->cluster , *cluster_name, *user_name, flags) != 0 ) {
111
133
NanThrowError (" create rados cluster failed" );
112
134
}
135
+ obj->state = 1 ;
113
136
if ( rados_conf_read_file (obj->cluster , *conffile) != 0 ) {
114
137
NanThrowError (" read conffile failed" );
115
138
}
139
+ obj->state = 2 ;
116
140
117
141
obj->Wrap (args.This ());
118
142
NanReturnValue (args.This ());
@@ -129,10 +153,15 @@ NAN_METHOD(Ioctx::New) {
129
153
130
154
Ioctx* obj = new Ioctx ();
131
155
Rados* cluster = ObjectWrap::Unwrap<Rados>(args[0 ]->ToObject ());
156
+ if ( !cluster->verify_ioctx_required () ) {
157
+ NanReturnNull ();
158
+ }
132
159
String::Utf8Value pool (args[1 ]);
133
160
if ( rados_ioctx_create (cluster->cluster , *pool, &obj->ioctx ) != 0 ) {
134
161
NanThrowError (" create Ioctx failed" );
135
162
}
163
+ obj->rados = cluster;
164
+ obj->state = 1 ;
136
165
137
166
obj->Wrap (args.This ());
138
167
NanReturnThis ();
@@ -144,8 +173,17 @@ NAN_METHOD(Rados::connect) {
144
173
145
174
Rados* obj = ObjectWrap::Unwrap<Rados>(args.This ());
146
175
176
+ if ( obj->state != 2 ) {
177
+ NanThrowError (" Cluster should be in configured state." );
178
+ NanReturnNull ();
179
+ }
180
+
147
181
int err = rados_connect (obj->cluster );
148
182
183
+ if (err == 0 ) {
184
+ obj->state = 3 ;
185
+ }
186
+
149
187
NanReturnValue (NanNew<Number>(-err));
150
188
}
151
189
@@ -209,8 +247,12 @@ NAN_METHOD(Ioctx::destroy) {
209
247
NanScope ();
210
248
211
249
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
250
+ if ( !obj->verify_required () ) {
251
+ NanReturnNull ();
252
+ }
212
253
213
254
rados_ioctx_destroy (obj->ioctx );
255
+ obj->state = 0 ;
214
256
215
257
NanReturnNull ();
216
258
}
@@ -225,6 +267,9 @@ NAN_METHOD(Ioctx::snap_create) {
225
267
}
226
268
227
269
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
270
+ if ( !obj->verify_required () ) {
271
+ NanReturnNull ();
272
+ }
228
273
String::Utf8Value snapname (args[0 ]);
229
274
230
275
int err = rados_ioctx_snap_create (obj->ioctx , *snapname);
@@ -242,6 +287,9 @@ NAN_METHOD(Ioctx::snap_remove) {
242
287
}
243
288
244
289
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
290
+ if ( !obj->verify_required () ) {
291
+ NanReturnNull ();
292
+ }
245
293
String::Utf8Value snapname (args[0 ]);
246
294
247
295
int err = rados_ioctx_snap_remove (obj->ioctx , *snapname);
@@ -260,6 +308,9 @@ NAN_METHOD(Ioctx::snap_rollback) {
260
308
}
261
309
262
310
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
311
+ if ( !obj->verify_required () ) {
312
+ NanReturnNull ();
313
+ }
263
314
String::Utf8Value oid (args[0 ]);
264
315
String::Utf8Value snapname (args[1 ]);
265
316
@@ -278,6 +329,9 @@ NAN_METHOD(Ioctx::read) {
278
329
}
279
330
280
331
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
332
+ if ( !obj->verify_required () ) {
333
+ NanReturnNull ();
334
+ }
281
335
String::Utf8Value oid (args[0 ]);
282
336
size_t size;
283
337
if (args[1 ]->IsNumber ()) {
@@ -312,6 +366,9 @@ NAN_METHOD(Ioctx::write) {
312
366
}
313
367
314
368
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
369
+ if ( !obj->verify_required () ) {
370
+ NanReturnNull ();
371
+ }
315
372
String::Utf8Value oid (args[0 ]);
316
373
char * buffer = Buffer::Data (args[1 ]);
317
374
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -333,6 +390,9 @@ NAN_METHOD(Ioctx::write_full) {
333
390
}
334
391
335
392
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
393
+ if ( !obj->verify_required () ) {
394
+ NanReturnNull ();
395
+ }
336
396
String::Utf8Value oid (args[0 ]);
337
397
char * buffer = Buffer::Data (args[1 ]);
338
398
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -356,6 +416,9 @@ NAN_METHOD(Ioctx::clone_range) {
356
416
}
357
417
358
418
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
419
+ if ( !obj->verify_required () ) {
420
+ NanReturnNull ();
421
+ }
359
422
String::Utf8Value dst (args[0 ]);
360
423
uint64_t dst_off = args[1 ]->Uint32Value ();
361
424
String::Utf8Value src (args[2 ]);
@@ -378,6 +441,9 @@ NAN_METHOD(Ioctx::append) {
378
441
}
379
442
380
443
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
444
+ if ( !obj->verify_required () ) {
445
+ NanReturnNull ();
446
+ }
381
447
String::Utf8Value oid (args[0 ]);
382
448
char * buffer = Buffer::Data (args[1 ]);
383
449
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -397,6 +463,9 @@ NAN_METHOD(Ioctx::remove) {
397
463
}
398
464
399
465
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
466
+ if ( !obj->verify_required () ) {
467
+ NanReturnNull ();
468
+ }
400
469
String::Utf8Value oid (args[0 ]);
401
470
402
471
int err = rados_remove (obj->ioctx , *oid);
@@ -415,6 +484,9 @@ NAN_METHOD(Ioctx::trunc) {
415
484
}
416
485
417
486
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
487
+ if ( !obj->verify_required () ) {
488
+ NanReturnNull ();
489
+ }
418
490
String::Utf8Value oid (args[0 ]);
419
491
size_t size = args[1 ]->Uint32Value ();
420
492
@@ -434,6 +506,9 @@ NAN_METHOD(Ioctx::getxattr) {
434
506
}
435
507
436
508
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
509
+ if ( !obj->verify_required () ) {
510
+ NanReturnNull ();
511
+ }
437
512
String::Utf8Value oid (args[0 ]);
438
513
String::Utf8Value name (args[1 ]);
439
514
size_t size;
@@ -471,6 +546,9 @@ NAN_METHOD(Ioctx::setxattr) {
471
546
}
472
547
473
548
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
549
+ if ( !obj->verify_required () ) {
550
+ NanReturnNull ();
551
+ }
474
552
String::Utf8Value oid (args[0 ]);
475
553
String::Utf8Value name (args[1 ]);
476
554
String::Utf8Value buffer (args[2 ]);
@@ -492,6 +570,9 @@ NAN_METHOD(Ioctx::rmxattr) {
492
570
}
493
571
494
572
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
573
+ if ( !obj->verify_required () ) {
574
+ NanReturnNull ();
575
+ }
495
576
String::Utf8Value oid (args[0 ]);
496
577
String::Utf8Value name (args[1 ]);
497
578
@@ -510,6 +591,9 @@ NAN_METHOD(Ioctx::getxattrs) {
510
591
}
511
592
512
593
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
594
+ if ( !obj->verify_required () ) {
595
+ NanReturnNull ();
596
+ }
513
597
String::Utf8Value oid (args[0 ]);
514
598
rados_xattrs_iter_t iter;
515
599
@@ -548,6 +632,9 @@ NAN_METHOD(Ioctx::stat) {
548
632
}
549
633
550
634
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
635
+ if ( !obj->verify_required () ) {
636
+ NanReturnNull ();
637
+ }
551
638
String::Utf8Value oid (args[0 ]);
552
639
uint64_t psize;
553
640
time_t pmtime;
@@ -618,6 +705,9 @@ NAN_METHOD(Ioctx::aio_read) {
618
705
}
619
706
620
707
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
708
+ if ( !obj->verify_required () ) {
709
+ NanReturnNull ();
710
+ }
621
711
String::Utf8Value oid (args[0 ]);
622
712
size_t size;
623
713
if (args[1 ]->IsNumber ()) {
@@ -676,6 +766,9 @@ NAN_METHOD(Ioctx::aio_write) {
676
766
}
677
767
678
768
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
769
+ if ( !obj->verify_required () ) {
770
+ NanReturnNull ();
771
+ }
679
772
String::Utf8Value oid (args[0 ]);
680
773
char * buffer = Buffer::Data (args[1 ]);
681
774
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -722,6 +815,9 @@ NAN_METHOD(Ioctx::aio_append) {
722
815
}
723
816
724
817
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
818
+ if ( !obj->verify_required () ) {
819
+ NanReturnNull ();
820
+ }
725
821
String::Utf8Value oid (args[0 ]);
726
822
char * buffer = Buffer::Data (args[1 ]);
727
823
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -767,6 +863,9 @@ NAN_METHOD(Ioctx::aio_write_full) {
767
863
}
768
864
769
865
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
866
+ if ( !obj->verify_required () ) {
867
+ NanReturnNull ();
868
+ }
770
869
String::Utf8Value oid (args[0 ]);
771
870
char * buffer = Buffer::Data (args[1 ]);
772
871
size_t size = args[2 ]->IsNumber () ? args[2 ]->Uint32Value () : Buffer::Length (args[1 ]);
@@ -804,6 +903,9 @@ NAN_METHOD(Ioctx::aio_flush) {
804
903
NanScope ();
805
904
806
905
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
906
+ if ( !obj->verify_required () ) {
907
+ NanReturnNull ();
908
+ }
807
909
808
910
int err = rados_aio_flush (obj->ioctx );
809
911
@@ -820,6 +922,9 @@ NAN_METHOD(Ioctx::aio_flush_async) {
820
922
}
821
923
822
924
Ioctx* obj = ObjectWrap::Unwrap<Ioctx>(args.This ());
925
+ if ( !obj->verify_required () ) {
926
+ NanReturnNull ();
927
+ }
823
928
824
929
AsyncData *asyncdata = new AsyncData;
825
930
rados_completion_t *comp = new rados_completion_t ;
0 commit comments