    

 ## On this page

  

 

 # DVS Features

 Last update: 16.07.2025 

Description of various features of the DVS API.

Description of various features of the DVS API.

---

## Delete Item API Overview

Sometimes solvers need to rewind to a previous timestep and begin writing new data for various reasons. The delete api facilitates this allowing users to make a call to delete specific timesteps or a collection of timesteps. This call is similar to the [dvs\_begin\_update()](dynamic__visualization__store__api_8h.html#aaac598618be531e8aa2b72ad41e18537 "Method to begin an update.") and [dvs\_end\_update()](dynamic__visualization__store__api_8h.html#ae75177bf47fcb28313e79840bf778c75 "Call to end the update for this timestep/rank/chunk.") calls where all ranks must make the same call for each rank in parallel. The API calls for this are [dvs\_delete\_item()](dynamic__visualization__store__api_8h.html#a5237ada583b0cb7817d12d1135f9349e "Delete an item.") (C API), [DVS::IClient::delete\_item()](class_d_v_s_1_1_i_client.html#a5e8f192f5c683a8265dd94020506a0aa "Delete an item.") (C++ API), and delete\_item() (Python API).

**Note:** Currently for the delete item api call to work the number of servers needs to match how the data was originally written. So if it was written using 3 servers everything should still be running with 3 servers when calling the delete item api. If the number of servers varies you will see inconsistent results on timesteps being fully deleted out of all caches.

Example Usage:

\#include &lt;string&gt;

\#include &lt;chrono&gt;

\#include &lt;thread&gt;

 

\#include "[dvs\_client\_interface.h](dvs__client__interface_8h.html)"

\#include "[dvs\_server\_interface.h](dvs__server__interface_8h.html)"

\#include "[dynamic\_visualization\_store\_enums.h](dynamic__visualization__store__enums_8h.html)"

 

static void logging_function(void* user_data, const char* message)

{

 fprintf(stderr, message);

}

 

int [main](test__dvs__client_8c.html#a3c04138a5bfe5d72780bb7e82a18e627)(int argc, char** argv)

{

 std::string server_uri = "grpc://localhost:12345/";

 [DVS::IServer](class_d_v_s_1_1_i_server.html)* server = DVS::CREATE_SERVER_INSTANCE(server_uri.c_str());

 if (!server) {

 //Error creating server

 return -1;

 }

 std::string cache_uri = "hdf5://localhost/D:/my/cache/location";

 //Set a cache uri location if saving/caching data

 server-&gt;[set\_option](class_d_v_s_1_1_i_server.html#a1edb4dec67086f10bc0329b6adf9084c)("CACHE\_URI", cache_uri.c_str());

 uint32_t server_number = 0; //Zero based server number

 uint32_t local_ranks = 1; //Number of local ranks for this specific server

 server-&gt;[startup](class_d_v_s_1_1_i_server.html#a6699cf48b29583ab3391b9b8397e611c)(server_number, local_ranks);

 

 //Turn on blocking for server and client side deduplication

 [dvs\_client\_flags](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9f) client_flags = [dvs\_client\_flags::BLOCK\_FOR\_SERVER](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9fa9feb185df8061416aa9a23b0150dc821) | [dvs\_client\_flags::DEDUP](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9fa81b113ffc96eb6d968a19950727c0ff9);

 std::string shared_secret = ""; // Can use a shared secret to authenticate clients with server

 [DVS::IClient](class_d_v_s_1_1_i_client.html)* client = [DVS::CREATE\_CLIENT\_INSTANCE](dvs__client__interface_8h.html#a2475075c9ab4c2e57a8f0b4ab5bc5df4)(server, client_flags, shared_secret.c_str());

 if (!client) {

 //Error creating client

 return -2;

 }

 [dvs\_log\_flags](dynamic__visualization__store__enums_8h.html#a9bca12092877a90e6c497994093a8609) log_flags = [dvs\_log\_flags::LOG\_ALL](dynamic__visualization__store__enums_8h.html#a9bca12092877a90e6c497994093a8609a87cff070224b283d7aace436723245fc); //Turn on all logging for debugging

 client-&gt;[set\_logger](class_d_v_s_1_1_i_client.html#a024475b03496bc310e211632d153517d)(new DVS::Logger(nullptr, log_flags, logging_function));

 

 std::string dataset_name = "my\_dataset";

 uint32_t my_rank = 0; //Zero based rank number;

 uint32_t num_global_ranks = 1; //Number of global ranks across all servers

 uint32_t num_chunks = 1; //Number of chunks this rank is using, 1 if not using chunking

 

 //Initialize dataset

 client-&gt;[begin\_init](class_d_v_s_1_1_i_client.html#aff782ecd341fddd87a22a15107efeb3b)(dataset_name.c_str(), my_rank, num_global_ranks, num_chunks);

 client-&gt;[set\_unit\_system](class_d_v_s_1_1_i_client.html#a284f922fec402e03365c7873502d1fde)("SI");

 {

 //Add a part

 [dvs\_part\_info](structdvs__part__info.html) part_info;

 part_info.[\_id](structdvs__part__info.html#ab4e6fd830f27fdfa60c7bf6c2c137695) = 1;

 part_info.[\_name](structdvs__part__info.html#aa3ef86ed8620b0419f05e4e255dd01fb) = "Part 1";

 part_info.[\_structured](structdvs__part__info.html#ab458569530b84c8a2403b2610af98989) = 0;

 part_info.[\_chunking](structdvs__part__info.html#af688078624a42e9ab53d3c194e2861c3) = 0;

 part_info.[\_metadata\_num\_pairs](structdvs__part__info.html#adb36557a49efa5373a258141dd472385) = 0;

 part_info.[\_metadata\_keys](structdvs__part__info.html#aef3ab830a0bfcab49d9cbed978e315c2) = nullptr;

 part_info.[\_metadata\_vals](structdvs__part__info.html#a59c04a77c663b68008a1f69b62574337) = nullptr;

 client-&gt;[add\_part\_info](class_d_v_s_1_1_i_client.html#a5e9ee6af237e76a6e270d99ec8cd4388)(&amp;part_info, 1);

 }

 {

 //Add a var

 [dvs\_var\_info](structdvs__var__info.html) var_info;

 var_info.[\_id](structdvs__var__info.html#abcef03f7b1e419ae39c7511de2385a9b) = 1;

 var_info.[\_name](structdvs__var__info.html#ad1b4aeadeb75d6ab2a446fef37f11d0a) = "Var 1";

 var_info.[\_type](structdvs__var__info.html#a721f90cd12b7e98cf0d2fcf99ed9c7a9) = [dvs\_var\_type::SCALAR](dynamic__visualization__store__enums_8h.html#af6aa6351345da4151507012681b3aff0a7efbb6cac96595e63e8fa171bde1eb68);

 var_info.[\_location](structdvs__var__info.html#abfd6a4461939e798ebdc5d6714a4558f) = [dvs\_var\_location::NODE](dynamic__visualization__store__enums_8h.html#af4f0eba512eff253854b44d7ce078491a59a889456a2d742fdca191dccb3e871d);

 var_info.[\_unit](structdvs__var__info.html#a3d7cdb8a063eaf6c94f95f3b589c8624) = "";

 var_info.[\_unit\_label](structdvs__var__info.html#a262ba1165d1929418e03a2a250774525) = "";

 var_info.[\_metadata\_num\_pairs](structdvs__var__info.html#a9f99fd8ad9d004f44939c830747ebfc8) = 0;

 var_info.[\_metadata\_keys](structdvs__var__info.html#a9c656726edeeb5c0cf5b9a42f870b3a2) = nullptr;

 var_info.[\_metadata\_vals](structdvs__var__info.html#abe0afbff61a368336c7750c831a3c056) = nullptr;

 client-&gt;[add\_var\_info](class_d_v_s_1_1_i_client.html#a82f841d7f6f33071bf8c709623ca215d)(&amp;var_info, 1);

 }

 client-&gt;[end\_init](class_d_v_s_1_1_i_client.html#aaf1641a1afbf8bb6257940be28dd94b2)();

 

 //Delete all timesteps after 5.5 seconds

 //See the DVS Cache URI section on Query Stanza's for more information on filtering.

 //The delete item API only supports timestep.time objects currently.

 client-&gt;[delete\_item](class_d_v_s_1_1_i_client.html#a5e8f192f5c683a8265dd94020506a0aa)(my_rank, "/timestep.time/gte/5.5");

 [DVS::DESTROY\_CLIENT\_INSTANCE](dvs__client__interface_8h.html#a3f13d009a9a07278cbca3449113d78fc)(client);

 uint32_t num_pending = 1;

 uint32_t num_complete = 0;

 //Wait until the server finished before shutting it down or the write operations may not complete

 while (num_pending &gt; 0) {

 [dvs\_ret](dynamic__visualization__store__error__codes_8h.html#a1d7466ae72e89fe36cbf2408b4f7d9c1) error = server-&gt;[get\_timestep\_count](class_d_v_s_1_1_i_server.html#a8a5339f222bcd46b06c2fa9a474b2c37)(num_pending, num_complete);

 if (error != [DVS\_NONE](dynamic__visualization__store__error__codes_8h.html#a83b88ce16159d34fe5ce63e7024462a7)) {

 break;

 }

 std::this_thread::sleep_for(std::chrono::milliseconds(50));

 }

 [DVS::DESTROY\_SERVER\_INSTANCE](dvs__server__interface_8h.html#adcdcbab1954ec53631a7136af7fc49b8)(server);

}

[DVS::IClient](class_d_v_s_1_1_i_client.html)

API for solvers to use to send data to EnSight servers.

**Definition** [dvs\_client\_interface.h:81](dvs__client__interface_8h_source.html#l00080)



[DVS::IClient::set\_logger](class_d_v_s_1_1_i_client.html#a024475b03496bc310e211632d153517d)

virtual void set_logger(ILogger *logger)=0

Set the logger interface to use.



[DVS::IClient::set\_unit\_system](class_d_v_s_1_1_i_client.html#a284f922fec402e03365c7873502d1fde)

virtual dvs_ret set_unit_system(const char *system)=0

Set the unit system we are using for this session (optional)



[DVS::IClient::delete\_item](class_d_v_s_1_1_i_client.html#a5e8f192f5c683a8265dd94020506a0aa)

virtual dvs_ret delete_item(uint32_t update_num, uint32_t rank, const char *filter)=0

Delete an item.



[DVS::IClient::add\_part\_info](class_d_v_s_1_1_i_client.html#a5e9ee6af237e76a6e270d99ec8cd4388)

virtual dvs_ret add_part_info(const dvs_part_info *part_info, uint32_t num_parts)=0

Add part information for session.



[DVS::IClient::add\_var\_info](class_d_v_s_1_1_i_client.html#a82f841d7f6f33071bf8c709623ca215d)

virtual dvs_ret add_var_info(const dvs_var_info *var_info, uint32_t num_vars)=0

Add variable information for session.



[DVS::IClient::end\_init](class_d_v_s_1_1_i_client.html#aaf1641a1afbf8bb6257940be28dd94b2)

virtual dvs_ret end_init()=0

Finish initialization for this rank.



[DVS::IClient::begin\_init](class_d_v_s_1_1_i_client.html#aff782ecd341fddd87a22a15107efeb3b)

virtual dvs_ret begin_init(const char *dataset_name, uint32_t current_rank, uint32_t total_ranks, uint32_t num_chunks)=0

Begins initialization for this rank.



[DVS::IServer](class_d_v_s_1_1_i_server.html)

Interface class used to run a dynamic data server in a thread accepting incoming client connections.

**Definition** [dvs\_server\_interface.h:60](dvs__server__interface_8h_source.html#l00059)



[DVS::IServer::set\_option](class_d_v_s_1_1_i_server.html#a1edb4dec67086f10bc0329b6adf9084c)

virtual void set_option(const char *key, const char *value)=0

Set a specific option on the server, these are used during startup See See Server Options.



[DVS::IServer::startup](class_d_v_s_1_1_i_server.html#a6699cf48b29583ab3391b9b8397e611c)

virtual dvs_ret startup(uint32_t server_number, uint32_t local_ranks)=0

Start the server.



[DVS::IServer::get\_timestep\_count](class_d_v_s_1_1_i_server.html#a8a5339f222bcd46b06c2fa9a474b2c37)

virtual dvs_ret get_timestep_count(uint32_t &amp;num_pending, uint32_t &amp;num_complete) const =0

return the current number of pending and complete timesteps in the server



[dvs\_client\_interface.h](dvs__client__interface_8h.html)

C++ Client API for using the Dynamic Visualization Store.



[DVS::CREATE\_CLIENT\_INSTANCE](dvs__client__interface_8h.html#a2475075c9ab4c2e57a8f0b4ab5bc5df4)

DVS_DLL_EXPORT DVS::IClient * CREATE_CLIENT_INSTANCE(DVS::IServer *server, dvs_client_flags flags, const char *secret)

Factory method to create a dynamic data client interface instance.



[DVS::DESTROY\_CLIENT\_INSTANCE](dvs__client__interface_8h.html#a3f13d009a9a07278cbca3449113d78fc)

DVS_DLL_EXPORT void DESTROY_CLIENT_INSTANCE(DVS::IClient *destroy)

Destruction method for a client created with CREATE_CLIENT_INSTANCE.



[dvs\_server\_interface.h](dvs__server__interface_8h.html)

C++ Server API for using Dynamic Visualization Store Server.



[DVS::DESTROY\_SERVER\_INSTANCE](dvs__server__interface_8h.html#adcdcbab1954ec53631a7136af7fc49b8)

DVS_DLL_EXPORT void DESTROY_SERVER_INSTANCE(DVS::IServer *destroy)

Destroy the server instance (also shutting it down if needed)



[dynamic\_visualization\_store\_enums.h](dynamic__visualization__store__enums_8h.html)

Contains enums used in C/C++ API.



[dvs\_log\_flags](dynamic__visualization__store__enums_8h.html#a9bca12092877a90e6c497994093a8609)

dvs_log_flags

Flags to control logging filters.

**Definition** [dynamic\_visualization\_store\_enums.h:82](dynamic__visualization__store__enums_8h_source.html#l00081)



[LOG\_ALL](dynamic__visualization__store__enums_8h.html#a9bca12092877a90e6c497994093a8609a87cff070224b283d7aace436723245fc)

@ LOG_ALL

Log all messages.

**Definition** [dynamic\_visualization\_store\_enums.h:87](dynamic__visualization__store__enums_8h_source.html#l00088)



[dvs\_client\_flags](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9f)

dvs_client_flags

Flags for specific server setup.

**Definition** [dynamic\_visualization\_store\_enums.h:70](dynamic__visualization__store__enums_8h_source.html#l00069)



[DEDUP](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9fa81b113ffc96eb6d968a19950727c0ff9)

@ DEDUP

Do not send duplicate data to server.

**Definition** [dynamic\_visualization\_store\_enums.h:73](dynamic__visualization__store__enums_8h_source.html#l00073)



[BLOCK\_FOR\_SERVER](dynamic__visualization__store__enums_8h.html#aec8cbac60b9cafe5d1c0ad6593f05e9fa9feb185df8061416aa9a23b0150dc821)

@ BLOCK_FOR_SERVER

Clients should block for servers to be initialized before sending data.

**Definition** [dynamic\_visualization\_store\_enums.h:72](dynamic__visualization__store__enums_8h_source.html#l00072)



[NODE](dynamic__visualization__store__enums_8h.html#af4f0eba512eff253854b44d7ce078491a59a889456a2d742fdca191dccb3e871d)

@ NODE

This is a field variable per each node of a part's mesh.

**Definition** [dynamic\_visualization\_store\_enums.h:34](dynamic__visualization__store__enums_8h_source.html#l00034)



[SCALAR](dynamic__visualization__store__enums_8h.html#af6aa6351345da4151507012681b3aff0a7efbb6cac96595e63e8fa171bde1eb68)

@ SCALAR

Scalar.

**Definition** [dynamic\_visualization\_store\_enums.h:46](dynamic__visualization__store__enums_8h_source.html#l00046)



[dvs\_ret](dynamic__visualization__store__error__codes_8h.html#a1d7466ae72e89fe36cbf2408b4f7d9c1)

int32_t dvs_ret

Return value of methods, TODO.

**Definition** [dynamic\_visualization\_store\_error\_codes.h:32](dynamic__visualization__store__error__codes_8h_source.html#l00032)



[DVS\_NONE](dynamic__visualization__store__error__codes_8h.html#a83b88ce16159d34fe5ce63e7024462a7)

\#define DVS_NONE

No detected error has occurred.

**Definition** [dynamic\_visualization\_store\_error\_codes.h:103](dynamic__visualization__store__error__codes_8h_source.html#l00103)



[dvs\_part\_info](structdvs__part__info.html)

Struct holding information for a part's definition.

**Definition** [dynamic\_visualization\_store\_api.h:77](dynamic__visualization__store__api_8h_source.html#l00076)



[dvs\_part\_info::\_metadata\_vals](structdvs__part__info.html#a59c04a77c663b68008a1f69b62574337)

char ** _metadata_vals

UTF-8 Compatible value, each array should be null terminate.

**Definition** [dynamic\_visualization\_store\_api.h:84](dynamic__visualization__store__api_8h_source.html#l00084)



[dvs\_part\_info::\_name](structdvs__part__info.html#aa3ef86ed8620b0419f05e4e255dd01fb)

char * _name

UTF-8 Compatible name of part [null terminated], max name length visible in GUI == 79,...

**Definition** [dynamic\_visualization\_store\_api.h:79](dynamic__visualization__store__api_8h_source.html#l00079)



[dvs\_part\_info::\_structured](structdvs__part__info.html#ab458569530b84c8a2403b2610af98989)

uint8_t _structured

Structured flag. 0 if unstructured, 1 if structured.

**Definition** [dynamic\_visualization\_store\_api.h:80](dynamic__visualization__store__api_8h_source.html#l00080)



[dvs\_part\_info::\_id](structdvs__part__info.html#ab4e6fd830f27fdfa60c7bf6c2c137695)

uint32_t _id

Unique identifier for part, MUST BE &gt; 0.

**Definition** [dynamic\_visualization\_store\_api.h:78](dynamic__visualization__store__api_8h_source.html#l00078)



[dvs\_part\_info::\_metadata\_num\_pairs](structdvs__part__info.html#adb36557a49efa5373a258141dd472385)

uint32_t _metadata_num_pairs

Number of arrays in _metadata_keys/_metadata_vals.

**Definition** [dynamic\_visualization\_store\_api.h:82](dynamic__visualization__store__api_8h_source.html#l00082)



[dvs\_part\_info::\_metadata\_keys](structdvs__part__info.html#aef3ab830a0bfcab49d9cbed978e315c2)

char ** _metadata_keys

UTF-8 Compatible key , each array should be null terminated.

**Definition** [dynamic\_visualization\_store\_api.h:83](dynamic__visualization__store__api_8h_source.html#l00083)



[dvs\_part\_info::\_chunking](structdvs__part__info.html#af688078624a42e9ab53d3c194e2861c3)

uint8_t _chunking

1 if using chunks

**Definition** [dynamic\_visualization\_store\_api.h:81](dynamic__visualization__store__api_8h_source.html#l00081)



[dvs\_var\_info](structdvs__var__info.html)

Struct holding information for a variable's definiton.

**Definition** [dynamic\_visualization\_store\_api.h:92](dynamic__visualization__store__api_8h_source.html#l00091)



[dvs\_var\_info::\_unit\_label](structdvs__var__info.html#a262ba1165d1929418e03a2a250774525)

char * _unit_label

UTF-8 Compatible label, see: https://nexusdemo.ensight.com/docs/python/html/ENS_UNITSSchema....

**Definition** [dynamic\_visualization\_store\_api.h:98](dynamic__visualization__store__api_8h_source.html#l00098)



[dvs\_var\_info::\_unit](structdvs__var__info.html#a3d7cdb8a063eaf6c94f95f3b589c8624)

char * _unit

UTF-8 Compatible unit type, see: https://nexusdemo.ensight.com/docs/python/html/ENS_UNITSSchema....

**Definition** [dynamic\_visualization\_store\_api.h:97](dynamic__visualization__store__api_8h_source.html#l00097)



[dvs\_var\_info::\_type](structdvs__var__info.html#a721f90cd12b7e98cf0d2fcf99ed9c7a9)

enum dvs_var_type _type

Type of variable, see dvs_var_type enum (dynamic_visualization_store_enums.h)

**Definition** [dynamic\_visualization\_store\_api.h:95](dynamic__visualization__store__api_8h_source.html#l00095)



[dvs\_var\_info::\_metadata\_keys](structdvs__var__info.html#a9c656726edeeb5c0cf5b9a42f870b3a2)

char ** _metadata_keys

UTF-8 Compatible key , each array should be null terminated.

**Definition** [dynamic\_visualization\_store\_api.h:100](dynamic__visualization__store__api_8h_source.html#l00100)



[dvs\_var\_info::\_metadata\_num\_pairs](structdvs__var__info.html#a9f99fd8ad9d004f44939c830747ebfc8)

uint32_t _metadata_num_pairs

Number of arrays in _metadata_keys/_metadata_vals.

**Definition** [dynamic\_visualization\_store\_api.h:99](dynamic__visualization__store__api_8h_source.html#l00099)



[dvs\_var\_info::\_id](structdvs__var__info.html#abcef03f7b1e419ae39c7511de2385a9b)

uint32_t _id

Unique id for variable.

**Definition** [dynamic\_visualization\_store\_api.h:93](dynamic__visualization__store__api_8h_source.html#l00093)



[dvs\_var\_info::\_metadata\_vals](structdvs__var__info.html#abe0afbff61a368336c7750c831a3c056)

char ** _metadata_vals

UTF-8 Compatible value, each array should be null terminated.

**Definition** [dynamic\_visualization\_store\_api.h:101](dynamic__visualization__store__api_8h_source.html#l00101)



[dvs\_var\_info::\_location](structdvs__var__info.html#abfd6a4461939e798ebdc5d6714a4558f)

enum dvs_var_location _location

Location of variable (case/part/element/node), see dvs_var_location enum (dynamic_visualization_store...

**Definition** [dynamic\_visualization\_store\_api.h:96](dynamic__visualization__store__api_8h_source.html#l00096)



[dvs\_var\_info::\_name](structdvs__var__info.html#ad1b4aeadeb75d6ab2a446fef37f11d0a)

char * _name

UTF-8 Compatible name of variable [null terminated], max name length visible in the GUI == 49,...

**Definition** [dynamic\_visualization\_store\_api.h:94](dynamic__visualization__store__api_8h_source.html#l00094)



[main](test__dvs__client_8c.html#a3c04138a5bfe5d72780bb7e82a18e627)

int main(int argc, char **argv)

Main method of test client application.

**Definition** [test\_dvs\_client.c:57](test__dvs__client_8c_source.html#l00057)