All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
as_scan Struct Reference

Detailed Description

In order to execute a scan using the Scan API, an as_scan object must be initialized and populated.

Initialization

Before using an as_scan, it must be initialized via either:

as_scan_init() should be used on a stack allocated as_scan. It will initialize the as_scan with the given namespace and set. On success, it will return a pointer to the initialized as_scan. Otherwise, NULL is returned.

as_scan scan;
as_scan_init(&scan, "namespace", "set");
AS_EXTERN as_scan * as_scan_init(as_scan *scan, const char *ns, const char *set)

as_scan_new() should be used to allocate and initialize a heap allocated as_scan. It will allocate the as_scan, then initialized it with the given namespace and set. On success, it will return a pointer to the initialized as_scan. Otherwise, NULL is returned.

as_scan* scan = as_scan_new("namespace", "set");
AS_EXTERN as_scan * as_scan_new(const char *ns, const char *set)

Destruction

When you are finished with the as_scan, you can destroy it and associated resources:

AS_EXTERN void as_scan_destroy(as_scan *scan)

Usage

An initialized as_scan can be populated with additional fields.

Selecting Bins

as_scan_select() is used to specify the bins to be selected by the scan. If a scan specifies bins to be selected, then only those bins will be returned. If no bins are selected, then all bins will be returned.

as_scan_select(query, "bin1");
as_scan_select(query, "bin2");
AS_EXTERN bool as_scan_select(as_scan *scan, const char *bin)

Before adding bins to select, the select structure must be initialized via either:

Both functions are given the number of bins to be selected.

A complete example using as_scan_select_inita()

as_scan_select(query, "bin1");
as_scan_select(query, "bin2");
#define as_scan_select_inita(__scan, __n)
Definition as_scan.h:438

Returning only meta data

A scan can return only record meta data, and exclude bins.

as_scan_set_nobins(scan, true);
AS_EXTERN bool as_scan_set_nobins(as_scan *scan, bool nobins)

Scan nodes in parallel

A scan can be made to scan all the nodes in parallel

AS_EXTERN bool as_scan_set_concurrent(as_scan *scan, bool concurrent)

Scan a Percentage of Records

A scan can define the percentage of record in the cluster to be scaned.

as_scan_set_percent(scan, 100);

Scan a Priority

To set the priority of the scan, the set as_scan.priority.

The priority of a scan can be defined as either:

  • AS_SCAN_PRIORITY_AUTO
  • AS_SCAN_PRIORITY_LOW
  • AS_SCAN_PRIORITY_MEDIUM
  • AS_SCAN_PRIORITY_HIGH
as_scan_set_priority(scan, AS_SCAN_PRIORITY_LOW);

Applying a UDF to each Record Scanned

A UDF can be applied to each record scanned.

To define the UDF for the scan, use as_scan_apply_each().

as_scan_apply_each(scan, "udf_module", "udf_function", arglist);
AS_EXTERN bool as_scan_apply_each(as_scan *scan, const char *module, const char *function, as_list *arglist)

Definition at line 255 of file as_scan.h.

#include "as_scan.h"

+ Collaboration diagram for as_scan:

Data Fields

as_udf_call apply_each
 
bool concurrent
 
bool deserialize_list_map
 
bool no_bins
 
as_namespace ns
 
struct as_operations_s * ops
 
bool paginate
 
as_partitions_statusparts_all
 
as_scan_bins select
 
as_set set
 
uint32_t ttl
 

Related Symbols

(Note that these are not member symbols.)

AS_EXTERN bool as_scan_apply_each (as_scan *scan, const char *module, const char *function, as_list *arglist)
 
AS_EXTERN bool as_scan_compare (as_scan *s1, as_scan *s2)
 
AS_EXTERN void as_scan_destroy (as_scan *scan)
 
AS_EXTERN bool as_scan_from_bytes (as_scan *scan, const uint8_t *bytes, uint32_t bytes_size)
 
AS_EXTERN as_scanas_scan_from_bytes_new (const uint8_t *bytes, uint32_t bytes_size)
 
AS_EXTERN as_scanas_scan_init (as_scan *scan, const char *ns, const char *set)
 
static bool as_scan_is_done (as_scan *scan)
 
AS_EXTERN as_scanas_scan_new (const char *ns, const char *set)
 
AS_EXTERN bool as_scan_select (as_scan *scan, const char *bin)
 
AS_EXTERN bool as_scan_select_init (as_scan *scan, uint16_t n)
 
#define as_scan_select_inita(__scan, __n)
 
AS_EXTERN bool as_scan_set_concurrent (as_scan *scan, bool concurrent)
 
AS_EXTERN bool as_scan_set_nobins (as_scan *scan, bool nobins)
 
static void as_scan_set_paginate (as_scan *scan, bool paginate)
 
static void as_scan_set_partitions (as_scan *scan, as_partitions_status *parts_all)
 
AS_EXTERN bool as_scan_to_bytes (const as_scan *scan, uint8_t **bytes, uint32_t *bytes_size)
 

Friends And Related Symbol Documentation

◆ as_scan_select_inita

#define as_scan_select_inita ( __scan,
__n )
related
Value:
do {\
if ((__scan)->select.entries == NULL) {\
(__scan)->select.entries = (as_bin_name*) alloca(sizeof(as_bin_name) * (__n));\
if ((__scan)->select.entries) {\
(__scan)->select.capacity = (__n);\
(__scan)->select.size = 0;\
(__scan)->select._free = false;\
}\
}\
} while(0)
char as_bin_name[AS_BIN_NAME_MAX_SIZE]
Definition as_bin.h:53
uint16_t capacity
Definition as_scan.h:122
as_bin_name * entries
Definition as_scan.h:117
uint16_t size
Definition as_scan.h:127
as_scan_bins select
Definition as_scan.h:285

Initializes as_scan.select with a capacity of n using alloca

For heap allocation, use as_scan_select_init().

as_scan_select(&scan, "bin1");
as_scan_select(&scan, "bin2");
Parameters
__scanThe scan to initialize.
__nThe number of bins to allocate.

Definition at line 438 of file as_scan.h.

Field Documentation

◆ apply_each

as_udf_call as_scan::apply_each

UDF to apply to results of the background scan.

Should be set via as_scan_apply_each().

Definition at line 292 of file as_scan.h.

◆ concurrent

bool as_scan::concurrent

Set to true if the scan should scan all the nodes in parallel

Default value is AS_SCAN_CONCURRENT_DEFAULT.

Definition at line 338 of file as_scan.h.

◆ deserialize_list_map

bool as_scan::deserialize_list_map

Set to true if the scan should deserialize list and map raw bytes. Set to false for backup programs that just need access to raw bytes.

Default value is AS_SCAN_DESERIALIZE_DEFAULT.

Definition at line 346 of file as_scan.h.

◆ no_bins

bool as_scan::no_bins

Set to true if the scan should return only the metadata of the record.

Default value is AS_SCAN_NOBINS_DEFAULT.

Definition at line 331 of file as_scan.h.

◆ ns

Namespace to be scanned.

Should be initialized via either:

Definition at line 265 of file as_scan.h.

◆ ops

struct as_operations_s* as_scan::ops

Perform write operations on a background scan. If ops is set, ops will be destroyed when as_scan_destroy() is called.

Definition at line 298 of file as_scan.h.

◆ paginate

bool as_scan::paginate

Set to true if as_policy_scan.max_records is set and you need to scan data in pages.

Default: false

Definition at line 324 of file as_scan.h.

◆ parts_all

as_partitions_status* as_scan::parts_all

Status of all partitions.

Definition at line 303 of file as_scan.h.

◆ select

as_scan_bins as_scan::select

Name of bins to select.

Use either of the following function to initialize:

Use as_scan_select() to populate.

Definition at line 285 of file as_scan.h.

◆ set

as_set as_scan::set

Set to be scanned.

Should be initialized via either:

Definition at line 274 of file as_scan.h.

◆ ttl

uint32_t as_scan::ttl

The time-to-live (expiration) of the record in seconds. Note that ttl is only used on background scan writes.

There are also special values that can be set in the record ttl:

  • AS_RECORD_DEFAULT_TTL: Use the server default ttl from the namespace.
  • AS_RECORD_NO_EXPIRE_TTL: Do not expire the record.
  • AS_RECORD_NO_CHANGE_TTL: Keep the existing record ttl when the record is updated.
  • AS_RECORD_CLIENT_DEFAULT_TTL: Use the default client ttl in as_policy_scan.

Definition at line 317 of file as_scan.h.


The documentation for this struct was generated from the following file: