@@ -496,7 +496,7 @@ def require_groups(self, *names):
496496 def create_dataset (self , name , data = None , shape = None , chunks = None ,
497497 dtype = None , compressor = 'default' , fill_value = None ,
498498 order = 'C' , synchronizer = None , filters = None ,
499- overwrite = False , ** kwargs ):
499+ overwrite = False , cache_metadata = True , ** kwargs ):
500500 """Create an array.
501501
502502 Parameters
@@ -525,6 +525,11 @@ def create_dataset(self, name, data=None, shape=None, chunks=None,
525525 compression.
526526 overwrite : bool, optional
527527 If True, replace any existing array or group with the given name.
528+ cache_metadata : bool, optional
529+ If True, array configuration metadata will be cached for the
530+ lifetime of the object. If False, array metadata will be reloaded
531+ prior to all data access and modification operations (may incur
532+ overhead depending on storage and data access pattern).
528533
529534 Returns
530535 -------
@@ -548,12 +553,14 @@ def create_dataset(self, name, data=None, shape=None, chunks=None,
548553 shape = shape , chunks = chunks , dtype = dtype ,
549554 compressor = compressor , fill_value = fill_value ,
550555 order = order , synchronizer = synchronizer ,
551- filters = filters , overwrite = overwrite , ** kwargs )
556+ filters = filters , overwrite = overwrite ,
557+ cache_metadata = cache_metadata , ** kwargs )
552558
553559 def _create_dataset_nosync (self , name , data = None , shape = None , chunks = None ,
554560 dtype = None , compressor = 'default' ,
555561 fill_value = None , order = 'C' , synchronizer = None ,
556- filters = None , overwrite = False , ** kwargs ):
562+ filters = None , overwrite = False ,
563+ cache_metadata = True , ** kwargs ):
557564
558565 path = self ._item_path (name )
559566
@@ -568,15 +575,17 @@ def _create_dataset_nosync(self, name, data=None, shape=None, chunks=None,
568575 order = order , synchronizer = synchronizer ,
569576 store = self ._store , path = path ,
570577 chunk_store = self ._chunk_store , filters = filters ,
571- overwrite = overwrite , ** kwargs )
578+ overwrite = overwrite , cache_metadata = cache_metadata ,
579+ ** kwargs )
572580
573581 else :
574582 a = create (shape = shape , chunks = chunks , dtype = dtype ,
575583 compressor = compressor , fill_value = fill_value ,
576584 order = order , synchronizer = synchronizer ,
577585 store = self ._store , path = path ,
578586 chunk_store = self ._chunk_store , filters = filters ,
579- overwrite = overwrite , ** kwargs )
587+ overwrite = overwrite , cache_metadata = cache_metadata ,
588+ ** kwargs )
580589
581590 return a
582591
@@ -608,8 +617,10 @@ def _require_dataset_nosync(self, name, shape, dtype=None, exact=False,
608617
609618 if contains_array (self ._store , path ):
610619 synchronizer = kwargs .get ('synchronizer' , self ._synchronizer )
620+ cache_metadata = kwargs .get ('cache_metadata' , True )
611621 a = Array (self ._store , path = path , read_only = self ._read_only ,
612- chunk_store = self ._chunk_store , synchronizer = synchronizer )
622+ chunk_store = self ._chunk_store ,
623+ synchronizer = synchronizer , cache_metadata = cache_metadata )
613624 shape = normalize_shape (shape )
614625 if shape != a .shape :
615626 raise TypeError ('shapes do not match' )
0 commit comments