Issue with deleted keys

I upgraded to version to 2.8.2104 and am having an issue where keys are getting deleted after some time. I do not have an eviction policy and do not have any expiry time set as I want all entries to persist.  When I run the info command I do not see that anything has been evicted or expired. Is this an issue or is there something else I am missing in the configuration? On previous versions I did not have this issue, all keys would permanently persist.  Below is the output from the info command and below that is the configuration file I am using.  Thanks.
<IP_ADDRESS>:6379> info
Server
redis_version:2.8.2104
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:83ad777ec89a946b
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:winsock_IOCP
process_id:22908
run_id:c2858dfa214f74a5ccb4765e2061bbc21c15b8b7
tcp_port:6379
uptime_in_seconds:352321
uptime_in_days:4
hz:10
lru_clock:4242286
config_file:C:\Program Files\Redis\redis.windows-service.conf
Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
Memory
used_memory:1394049800
used_memory_human:1.30G
used_memory_rss:1394016120
used_memory_peak:5582495640
used_memory_peak_human:5.20G
used_memory_lua:36864
mem_fragmentation_ratio:1.00
mem_allocator:dlmalloc-2.8
Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1447082845
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:20
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
Stats
total_connections_received:71
total_commands_processed:11224398
instantaneous_ops_per_sec:0
total_net_input_bytes:6312239337
total_net_output_bytes:0
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:5939347
keyspace_misses:2288496
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:100405
Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
CPU
used_cpu_sys:321.48
used_cpu_user:129.28
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
Keyspace
db0:keys=544191,expires=0,avg_ttl=0
CONFIG FILE:
# Redis configuration file example

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g =><PHONE_NUMBER> bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES ###################################

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
#
# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include .\path\to\local.conf
# include c:\path\to\other.conf

################################ GENERAL  #####################################

# On Windows, daemonize and pidfile are not supported.
# However, you can run redis as a Windows service, and specify a logfile.
# The logfile will contain the pid.

# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

# By default Redis listens for connections from all the network interfaces
# available on the server. It is possible to listen to just one or multiple
# interfaces using the "bind" configuration directive, followed by one or
# more IP addresses.
#
# Examples:
#
# bind <IP_ADDRESS> <IP_ADDRESS>
# bind <IP_ADDRESS>

# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Take the connection alive from the point of view of network
#    equipment in the middle.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 60 seconds.
tcp-keepalive 0

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also 'stdout' can be used to force
# Redis to log on the standard output.
logfile "Logs/redis_log.txt"

# To enable logging to the Windows EventLog, just set 'syslog-enabled' to
# yes, and optionally update the other syslog parameters to suit your needs.
# If Redis is installed and launched as a Windows Service, this will
# automatically be enabled.
syslog-enabled yes

# Specify the source name of the events in the Windows Application log.
syslog-ident redis

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one save point) and the latest background save failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
#
# If the background saving process will start working again Redis will
# automatically allow writes again.
#
# However if you have setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
stop-writes-on-bgsave-error yes

# Compress string objects using LZF when dump .rdb databases?
# For default that's set to 'yes' as it's almost always a win.
# If you want to save some CPU in the saving child set it to 'no' but
# the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
# for maximum performances.
#
# RDB files created with checksum disabled have a checksum of zero that will
# tell the loading code to skip the check.
rdbchecksum yes

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir D:\redis

################################# REPLICATION #################################

# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition slaves automatically try to reconnect to masters
#    and resynchronize with them.
#
# slaveof <masterip> <masterport>

# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth <master-password>

# When a slave loses its connection with the master, or when the replication
# is still in progress, the slave can act in two different ways:
#
# 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
#    still reply to client requests, possibly with out of date data, or the
#    data set may just be empty if this is the first synchronization.
#
# 2) if slave-serve-stale-data is set to 'no' the slave will reply with
#    an error "SYNC with master in progress" to all the kind of commands
#    but to INFO and SLAVEOF.
#
slave-serve-stale-data yes

# You can configure a slave instance to accept writes or not. Writing against
# a slave instance may be useful to store some ephemeral data (because data
# written on a slave will be easily deleted after resync with the master) but
# may also cause problems if clients are writing to it because of a
# misconfiguration.
#
# Since Redis 2.6 by default slaves are read-only.
#
# Note: read only slaves are not designed to be exposed to untrusted clients
# on the internet. It's just a protection layer against misuse of the instance.
# Still a read only slave exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only slaves using 'rename-command' to shadow all the
# administrative / dangerous commands.
slave-read-only yes

# Replication SYNC strategy: disk or socket.
#
# -------------------------------------------------------
# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
# -------------------------------------------------------
#
# New slaves and reconnecting slaves that are not able to continue the replication
# process just receiving differences, need to do what is called a "full
# synchronization". An RDB file is transmitted from the master to the slaves.
# The transmission can happen in two different ways:
#
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
#                 file on disk. Later the file is transferred by the parent
#                 process to the slaves incrementally.
# 2) Diskless: The Redis master creates a new process that directly writes the
#              RDB file to slave sockets, without touching the disk at all.
#
# With disk-backed replication, while the RDB file is generated, more slaves
# can be queued and served with the RDB file as soon as the current child producing
# the RDB file finishes its work. With diskless replication instead once
# the transfer starts, new slaves arriving will be queued and a new transfer
# will start when the current one terminates.
#
# When diskless replication is used, the master waits a configurable amount of
# time (in seconds) before starting the transfer in the hope that multiple slaves
# will arrive and the transfer can be parallelized.
#
# With slow disks and fast (large bandwidth) networks, diskless replication
# works better.
repl-diskless-sync no

# When diskless replication is enabled, it is possible to configure the delay
# the server waits in order to spawn the child that trnasfers the RDB via socket
# to the slaves.
#
# This is important since once the transfer starts, it is not possible to serve
# new slaves arriving, that will be queued for the next RDB transfer, so the server
# waits a delay in order to let more slaves arrive.
#
# The delay is specified in seconds, and by default is 5 seconds. To disable
# it entirely just set it to 0 seconds and the transfer will start ASAP.
repl-diskless-sync-delay 5

# Slaves send PINGs to server in a predefined interval. It's possible to change
# this interval with the repl_ping_slave_period option. The default value is 10
# seconds.
#
# repl-ping-slave-period 10

# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of slave.
# 2) Master timeout from the point of view of slaves (data, pings).
# 3) Slave timeout from the point of view of masters (REPLCONF ACK pings).
#
# It is important to make sure that this value is greater than the value
# specified for repl-ping-slave-period otherwise a timeout will be detected
# every time there is low traffic between the master and the slave.
#
# repl-timeout 60

# Disable TCP_NODELAY on the slave socket after SYNC?
#
# If you select "yes" Redis will use a smaller number of TCP packets and
# less bandwidth to send data to slaves. But this can add a delay for
# the data to appear on the slave side, up to 40 milliseconds with
# Linux kernels using a default configuration.
#
# If you select "no" the delay for data to appear on the slave side will
# be reduced but more bandwidth will be used for replication.
#
# By default we optimize for low latency, but in very high traffic conditions
# or when the master and slaves are many hops away, turning this to "yes" may
# be a good idea.
repl-disable-tcp-nodelay no

# Set the replication backlog size. The backlog is a buffer that accumulates
# slave data when slaves are disconnected for some time, so that when a slave
# wants to reconnect again, often a full resync is not needed, but a partial
# resync is enough, just passing the portion of data the slave missed while
# disconnected.
#
# The bigger the replication backlog, the longer the time the slave can be
# disconnected and later be able to perform a partial resynchronization.
#
# The backlog is only allocated once there is at least a slave connected.
#
# repl-backlog-size 1mb

# After a master has no longer connected slaves for some time, the backlog
# will be freed. The following option configures the amount of seconds that
# need to elapse, starting from the time the last slave disconnected, for
# the backlog buffer to be freed.
#
# A value of 0 means to never release the backlog.
#
# repl-backlog-ttl 3600

# The slave priority is an integer number published by Redis in the INFO output.
# It is used by Redis Sentinel in order to select a slave to promote into a
# master if the master is no longer working correctly.
#
# A slave with a low priority number is considered better for promotion, so
# for instance if there are three slaves with priority 10, 100, 25 Sentinel will
# pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the slave as not able to perform the
# role of master, so a slave with priority of 0 will never be selected by
# Redis Sentinel for promotion.
#
# By default the priority is 100.
slave-priority 100

# It is possible for a master to stop accepting writes if there are less than
# N slaves connected, having a lag less or equal than M seconds.
#
# The N slaves need to be in "online" state.
#
# The lag in seconds, that must be <= the specified value, is calculated from
# the last ping received from the slave, that is usually sent every second.
#
# This option does not GUARANTEE that N replicas will accept the write, but
# will limit the window of exposure for lost writes in case not enough slaves
# are available, to the specified number of seconds.
#
# For example to require at least 3 slaves with a lag <= 10 seconds use:
#
# min-slaves-to-write 3
# min-slaves-max-lag 10
#
# Setting one or the other to 0 disables the feature.
#
# By default min-slaves-to-write is set to 0 (feature disabled) and
# min-slaves-max-lag is set to 10.

################################## SECURITY ###################################

# Require clients to issue AUTH <PASSWORD> before processing any other
# commands.  This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared

# Command renaming.
#
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it will still be available for internal-use tools
# but not available for general clients.
#
# Example:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
# rename-command CONFIG ""
#
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to slaves may cause problems.

################################### LIMITS ####################################

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000

# The Linux version of Redis relies on the system call fork() to perform
# point-in-time snapshots of the heap. In addition to the AOF and RDB backup
# mechanism, the master-slave synchronization and clustering features are
# dependent on this behavior of fork(). In order for the Windows version to
# perform like the Linux version we had to simulate this aspect of fork().
# Doing so meant moving the Redis heap into a memory mapped file that can
# be shared with a child process.
#
# *** There must be disk space available for this file in order for Redis
# to launch. *** The default configuration places this file in the local
# appdata directory. If you wish to move this file to another local disk,
# use the heapdir flag as described below.
#
# The maxheap flag controls the maximum size of this memory mapped file,
# as well as the total usable space for the Redis heap. Running Redis
# without either maxheap or maxmemory will result in a memory mapped file
# being created that is equal to the size of physical memory. During
# fork() operations the total page file commit will max out at around:
#
#    (size of physical memory) + (2 * size of maxheap)
#
# For instance, on a machine with 8GB of physical RAM, the max page file
# commit with the default maxheap size will be (8)+(2*8) GB , or 24GB. The
# default page file sizing of Windows will allow for this without having
# to reconfigure the system. Larger heap sizes are possible, but the maximum
# page file size will have to be increased accordingly.
#
# The Redis heap must be larger than the value specified by the maxmemory
# flag, as the heap allocator has its own memory requirements and
# fragmentation of the heap is inevitable. If only the maxmemory flag is
# specified, maxheap will be set at 1.5*maxmemory. If the maxheap flag is
# specified along with maxmemory, the maxheap flag will be automatically
# increased if it is smaller than 1.5*maxmemory.
#
maxheap 10000mb

# The heap memory mapped file must reside on a local path for heap sharing
# between processes to work. A UNC path will not suffice here. For maximum
# performance this should be located on the fastest local drive available.
# This value defaults to the local application data folder(e.g.,
# "%USERPROFILE%\AppData\Local"). Since this file can be very large, you
# may wish to place this on a drive other than the one the operating system
# is installed on.
#
# Note that you must specify a directory here, not a file name.
heapdir D:\redis

# If Redis is to be used as an in-memory-only cache without any kind of
# persistence, then the fork() mechanism used by the background AOF/RDB
# persistence is unneccessary. As an optimization, all persistence can be
# turned off in the Windows version of Redis. This will disable the creation of
# the memory mapped heap file, redirect heap allocations to the system heap
# allocator, and disable commands that would otherwise cause fork() operations:
# BGSAVE and BGREWRITEAOF. This flag may not be combined with any of the other
# flags that configure AOF and RDB operations.
# persistence-available [(yes)|no]

# Don't use more memory than the specified amount of bytes.
# When the memory limit is reached Redis will try to remove keys
# according to the eviction policy selected (see maxmemory-policy).
#
# If Redis can't remove keys according to the policy, or if the policy is
# set to 'noeviction', Redis will start to reply with errors to commands
# that would use more memory, like SET, LPUSH, and so on, and will continue
# to reply to read-only commands like GET.
#
# This option is usually useful when using Redis as an LRU cache, or to set
# a hard memory limit for an instance (using the 'noeviction' policy).
#
# WARNING: If you have slaves attached to an instance with maxmemory on,
# the size of the output buffers needed to feed the slaves are subtracted
# from the used memory count, so that network problems / resyncs will
# not trigger a loop where keys are evicted, and in turn the output
# buffer of slaves is full with DELs of keys evicted triggering the deletion
# of more keys, and so forth until the database is completely emptied.
#
# In short... if you have slaves attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for slave
# output buffers (but this is not needed if the policy is 'noeviction').
#
# WARNING: not setting maxmemory will cause Redis to terminate with an
# out-of-memory exception if the maxheap limit is reached.
#
# maxmemory 5000mb

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
#
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
#
# Note: with any of the above policies, Redis will return an error on write
#       operations, when there are no suitable keys for eviction.
#
#       At the date of writing these commands are: set setnx setex append
#       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
#       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
#       getset mset msetnx exec sort
#
# The default is:
#
# maxmemory-policy volatile-lru

# LRU and minimal TTL algorithms are not precise algorithms but approximated
# algorithms (in order to save memory), so you can select as well the sample
# size to check. For instance for default Redis will check three keys and
# pick the one that was used less recently, you can change the sample size
# using the following configuration directive.
#
# maxmemory-samples 3

############################## APPEND ONLY MODE ###############################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).
#
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
#
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
#
# Please check http://redis.io/topics/persistence for more information.

appendonly no

# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"

# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log . Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

# When the AOF fsync policy is set to always or everysec, and a background
# saving process (a background save or AOF log background rewriting) is
# performing a lot of I/O against the disk, in some Linux configurations
# Redis may block too long on the fsync() call. Note that there is no fix for
# this currently, as even performing fsync in a different thread will block
# our synchronous write(2) call.
#
# In order to mitigate this problem it's possible to use the following option
# that will prevent fsync() from being called in the main process while a
# BGSAVE or BGREWRITEAOF is in progress.
#
# This means that while another child is saving, the durability of Redis is
# the same as "appendfsync none". In practical terms, this means that it is
# possible to lose up to 30 seconds of log in the worst scenario (with the
# default Linux settings).
#
# If you have latency problems turn this to "yes". Otherwise leave it as
# "no" that is the safest pick from the point of view of durability.
no-appendfsync-on-rewrite no

# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# An AOF file may be found to be truncated at the end during the Redis
# startup process, when the AOF data gets loaded back into memory.
# This may happen when the system where Redis is running
# crashes, especially when an ext4 filesystem is mounted without the
# data=ordered option (however this can't happen when Redis itself
# crashes or aborts but the operating system still works correctly).
#
# Redis can either exit with an error when this happens, or load as much
# data as possible (the default now) and start if the AOF file is found
# to be truncated at the end. The following option controls this behavior.
#
# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
# the Redis server starts emitting a log to inform the user of the event.
# Otherwise if the option is set to no, the server aborts with an error
# and refuses to start. When the option is set to no, the user requires
# to fix the AOF file using the "redis-check-aof" utility before to restart
# the server.
#
# Note that if the AOF file will be found to be corrupted in the middle
# the server will still exit with an error. This option only applies when
# Redis will try to read more data from the AOF file but not enough bytes
# will be found.
aof-load-truncated yes

################################ LUA SCRIPTING  ###############################

# Max execution time of a Lua script in milliseconds.
#
# If the maximum execution time is reached Redis will log that a script is
# still in execution after the maximum allowed time and will start to
# reply to queries with an error.
#
# When a long running script exceeds the maximum execution time only the
# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
# used to stop a script that did not yet called write commands. The second
# is the only way to shut down the server in the case a write command was
# already issued by the script but the user doesn't want to wait for the natural
# termination of the script.
#
# Set it to 0 or a negative value for unlimited execution without warnings.
lua-time-limit 5000

################################## SLOW LOG ###################################

# The Redis Slow Log is a system to log queries that exceeded a specified
# execution time. The execution time does not include the I/O operations
# like talking with the client, sending the reply and so forth,
# but just the time needed to actually execute the command (this is the only
# stage of command execution where the thread is blocked and can not serve
# other requests in the meantime).
#
# You can configure the slow log with two parameters: one tells Redis
# what is the execution time, in microseconds, to exceed in order for the
# command to get logged, and the other parameter is the length of the
# slow log. When a new command is logged the oldest one is removed from the
# queue of logged commands.

# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
slowlog-log-slower-than 10000

# There is no limit to this length. Just be aware that it will consume memory.
# You can reclaim memory used by the slow log with SLOWLOG RESET.
slowlog-max-len 128

################################ LATENCY MONITOR ##############################

# The Redis latency monitoring subsystem samples different operations
# at runtime in order to collect data related to possible sources of
# latency of a Redis instance.
#
# Via the LATENCY command this information is available to the user that can
# print graphs and obtain reports.
#
# The system only logs operations that were performed in a time equal or
# greater than the amount of milliseconds specified via the
# latency-monitor-threshold configuration directive. When its value is set
# to zero, the latency monitor is turned off.
#
# By default latency monitoring is disabled since it is mostly not needed
# if you don't have latency issues, and collecting data has a performance
# impact, that while very small, can be measured under big load. Latency
# monitoring can easily be enalbed at runtime using the command
# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
latency-monitor-threshold 0

############################# Event notification ##############################

# Redis can notify Pub/Sub clients about events happening in the key space.
# This feature is documented at http://redis.io/topics/notifications
#
# For instance if keyspace events notification is enabled, and a client
# performs a DEL operation on key "foo" stored in the Database 0, two
# messages will be published via Pub/Sub:
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# It is possible to select the events that Redis will notify among a set
# of classes. Every class is identified by a single character:
#
#  K     Keyspace events, published with __keyspace@<db>__ prefix.
#  E     Keyevent events, published with __keyevent@<db>__ prefix.
#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
#  $     String commands
#  l     List commands
#  s     Set commands
#  h     Hash commands
#  z     Sorted set commands
#  x     Expired events (events generated every time a key expires)
#  e     Evicted events (events generated when a key is evicted for maxmemory)
#  A     Alias for g$lshzxe, so that the "AKE" string means all the events.
#
#  The "notify-keyspace-events" takes as argument a string that is composed
#  of zero or multiple characters. The empty string means that notifications
#  are disabled.
#
#  Example: to enable list and generic events, from the point of view of the
#           event name, use:
#
#  notify-keyspace-events Elg
#
#  Example 2: to get the stream of the expired keys subscribing to channel
#             name __keyevent@0__:expired use:
#
#  notify-keyspace-events Ex
#
#  By default all notifications are disabled because most users don't need
#  this feature and the feature has some overhead. Note that if you don't
#  specify at least one of K or E, no events will be delivered.
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################

# Hashes are encoded using a memory efficient data structure when they have a
# small number of entries, and the biggest entry does not exceed a given
# threshold. These thresholds can be configured using the following directives.
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# Similarly to hashes, small lists are also encoded in a special way in order
# to save a lot of space. The special representation is only used when
# you are under the following limits:
list-max-ziplist-entries 512
list-max-ziplist-value 64

# Sets have a special encoding in just one case: when a set is composed
# of just strings that happen to be integers in radix 10 in the range
# of 64 bit signed integers.
# The following configuration setting sets the limit in the size of the
# set in order to use this special memory saving encoding.
set-max-intset-entries 512

# Similarly to hashes and lists, sorted sets are also specially encoded in
# order to save a lot of space. This encoding is only used when the length and
# elements of a sorted set are below the following limits:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog sparse representation bytes limit. The limit includes the
# 16 bytes header. When an HyperLogLog using the sparse representation crosses
# this limit, it is converted into the dense representation.
#
# A value greater than 16000 is totally useless, since at that point the
# dense representation is more memory efficient.
#
# The suggested value is ~ 3000 in order to have the benefits of
# the space efficient encoding without slowing down too much PFADD,
# which is O(N) with the sparse encoding. The value can be raised to
# ~ 10000 when CPU is not a concern, but space is, and the data set is
# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
hll-sparse-max-bytes 3000

# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
# order to help rehashing the main Redis hash table (the one mapping top-level
# keys to values). The hash table implementation Redis uses (see dict.c)
# performs a lazy rehashing: the more operation you run into a hash table
# that is rehashing, the more rehashing "steps" are performed, so if the
# server is idle the rehashing is never complete and some more memory is used
# by the hash table.
#
# The default is to use this millisecond 10 times every second in order to
# actively rehash the main dictionaries, freeing memory when possible.
#
# If unsure:
# use "activerehashing no" if you have hard latency requirements and it is
# not a good thing in your environment that Redis can reply from time to time
# to queries with 2 milliseconds delay.
#
# use "activerehashing yes" if you don't have such hard requirements but
# want to free memory asap when possible.
activerehashing yes

# The client output buffer limits can be used to force disconnection of clients
# that are not reading data from the server fast enough for some reason (a
# common reason is that a Pub/Sub client can't consume messages as fast as the
# publisher can produce them).
#
# The limit can be set differently for the three different classes of clients:
#
# normal -> normal clients including MONITOR clients
# slave  -> slave clients
# pubsub -> clients subscribed to at least one pubsub channel or pattern
#
# The syntax of every client-output-buffer-limit directive is the following:
#
# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
#
# A client is immediately disconnected once the hard limit is reached, or if
# the soft limit is reached and remains reached for the specified number of
# seconds (continuously).
# So for instance if the hard limit is 32 megabytes and the soft limit is
# 16 megabytes / 10 seconds, the client will get disconnected immediately
# if the size of the output buffers reach 32 megabytes, but will also get
# disconnected if the client reaches 16 megabytes and continuously overcomes
# the limit for 10 seconds.
#
# By default normal clients are not limited because they don't receive data
# without asking (in a push way), but just after a request, so only
# asynchronous clients may create a scenario where data is requested faster
# than it can read.
#
# Instead there is a default limit for pubsub and slave clients, since
# subscribers and slaves receive data in a push fashion.
#
# Both the hard or the soft limit can be disabled by setting them to zero.
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Redis calls an internal function to perform many background tasks, like
# closing connections of clients in timeot, purging expired keys that are
# never requested, and so forth.
#
# Not all tasks are perforemd with the same frequency, but Redis checks for
# tasks to perform according to the specified "hz" value.
#
# By default "hz" is set to 10. Raising the value will use more CPU when
# Redis is idle, but at the same time will make Redis more responsive when
# there are many keys expiring at the same time, and timeouts may be
# handled with more precision.
#
# The range is between 1 and 500, however a value over 100 is usually not
# a good idea. Most users should use the default of 10 and raise this up to
# 100 only in environments where very low latency is required.
hz 10

# When a child rewrites the AOF file, if the following option is enabled
# the file will be fsync-ed every 32 MB of data generated. This is useful
# in order to commit the file to the disk more incrementally and avoid
# big latency spikes.
aof-rewrite-incremental-fsync yes

################################## INCLUDES ###################################

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis server but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
#
# include /path/to/local.conf
# include /path/to/other.conf

Hi @guptaa16
can you please explain how did you determine that keys were evicted/expired?
Since the INFO output doesn't show any evicted/expired key:
expired_keys:0
evicted_keys:0
Thank you.

Hi, so I figured out what my problem was.  I didnt realize that my redis instance was open to the internet and my database was actually getting hacked as antirez has discussed here:  http://antirez.com/news/96.  The tipoff was my database had actually been renamed to a  authorized_keys file.
I think what happened was I used the newest MSI installer which by default has the option checked to configure the windows firewall for redis (which previously I had left blocked.)  That combined with the default redis configuration binding all IP addresses left me wide open.  With the current MSI default installer and config this leaves people who are unaware to being completely open to attackers.  Maybe worth considering changing the default to be more secure.

Hi @guptaa16
sorry to hear about the hacking, but glad you fixed it.
I agree that the default configuration is not optimal in terms of security, but it's also problematic to change some default settings that have been used for a while, it may break things for many users.
But if more people will ask for it we may change it, so feel free to open an issue proposing the change to get the community feedback.
Thank you.


Using RUN curl instead of ADD to resolve build Docker build issue

backup-1-build
STEP 7: ARG GOCROND_VERSION=0.6.3
e55ddcc18af7ee9b5dea5822e3b9172f85bcee5eef6afb272e09d61d2013cdb8
STEP 8: ADD https://github.com/$SOURCE_REPO/go-crond/releases/download/$GOCROND_VERSION/go-crond-64-linux /usr/bin/go-crond
error: build error: error building at STEP "ADD https://github.com/$SOURCE_REPO/go-crond/releases/download/$GOCROND_VERSION/go-crond-64-linux /usr/bin/go-crond": source can't be a URL for COPY

You shouldn't need to do that.  What version of docker are you using?

Seems the recommendations on ADD vs COPY vs curl have changed; https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy

Although ADD is being used as is was intended in this case:
Consequently, the best use for ADD is local tar file auto-extraction into the image, as in ADD rootfs.tar.xz /.

Is that a tar?  Source file looks like an executable dropped in the /bin directly
https://github.com/BCDevOps/go-crond/releases/download/0.6.3/go-crond-64-linux

Good catch.

Hang-on, it worked first go.  Now I'm seeing a curl error on repeated attempts.  Investigating.

Not sure how it worked the first time but it does now.
curl error 23, couldn't write to /usr/bin/
Dropped the curl command below the switch to root.
I'll repeat a few times to confirm and create a clean PR with one change when that's done.


Forward Loki alert rules as well as Prometheus alert rules

Issue
For completeness, Grafana Agent should forward both types of alerts to the appropriate endpoints.
In addition, testing this required building out the unit tests to a point where they are meaningful. We were already forwarding Prometheus rules, but no tests were present.
Solution
Create partial methods on GrafanaAgentOperatorCharm which serve as observers with some default args, which then carry through to an update_alerts method which dynamically handles dispatching/reloading. Use a namedtuple for src and dest for a little abstraction.
Testing Instructions
Relate and verify
Release Notes
Forward Loki alert rules as well

Do we expect to be forking the two tester charms more than just here? If yes, perhaps turn them into relation interface (tester) charms?

I wouldn't really call this a fork either, just a copy+paste because they already did what we needed. I definitely don't think we should turn them in any kind of "real" charms (relation interface tester or other). Both tester charms, both here and in their "original" repos, are cleaned, new client libraries copied in, and rebuilt when the integration tests are run.
They are essentially dynamically generated, and they should stay there.


oopsy: death reports

One thing that I think ACT does really well that it'd be nice to have more readily at hand is death reports.  These are the last ~10 seconds of healing and damage taken before death.  Improvements on that could include shielding and other buff/debuff knowledge too.
Mostly, I think it would just be convenient to have more information than the last damage a player took at hand.
I suspect this would be too noisy to include in the log, but maybe this could be a mouseover? Or a separate list? The UI is an open question.

Done.


Ss/containerizers

@nfnt Here's the barest bones of the document. I need to fill this in a bit, but does it look OK to you so far? Next step is a blog post.

Hi, @nfnt . This is the DC/OS-specific page about containerizers. I put the unified containerizer front and center. Is there anything you'd add, correct...?

LGTM!

@joel-hamill - I'm currently wrestling with getting the local build working, but the text is ready for review.

@joel-hamill If this looks good to you I'll publish. I asked Miguel for feedback from a support perspective -- he had one change to make but otherwise said it was good.

lgtm, thanks!


Xrdp as unprivileged user

Fixes #2965
Parameters are added to xrdp.ini and sesman.ini to allow running as a non-privileged user.
The following issues were found in implementing this:-

PID files either need to be made alterable and deleteable by the non-privileged user, or just left to be deleted elsewhere. It seems current best-practice is the second of these. I've gone with that approach.

A problem was found with #2731 which is fixed in commit<PHONE_NUMBER>7744d32d90199c2ab890b9265da4b2. This should probably be factored out as a separate PR. Edit 2024-3-22: See #3011

We know it's tricky to get permissions right for non-privileged xrdp - there's a constant theme of users who don't understand why TLS doesn't work out-of-the-box on Debian/Ubuntu (see Debian BTS #860890). To address this I've provided a script which checks file permissions are correct when the parameters in xrdp.ini are entered or changed. This is referred to from the xrdp.ini manpage.

By default, xrdp runs as root. User interaction is required to address this. I've done this more for porting than anything else.
I've completed initial testing on Ubuntu and FreeBSD. The permissions check script may not work on some more oddball systems like Alpine Linux.
This is a complex area and I may well have omitted something. Feedback most welcome!
BTW: As I write this, Github CI is broken. Hopefully it will be working by Monday.

Thanks! I'll look into this soon.

Overall, LGTM.
Isn't xrdp-chkpriv script installed? Also, we need a check for rsakeys.ini?

I've just added another check to xrdp-chkpriv, which is that the TLS files are readable but NOT writeable by the unprivileged user:-

$ sudo chmod 660 /etc/xrdp/cert.pem
$ sudo ./xrdp-chkpriv
Settings
 - [xrdp.ini]   runtime_user        : xrdp
 - [xrdp.ini]   runtime_group       : xrdp
 - [xrdp.ini]   certificate         : /etc/xrdp/cert.pem
 - [xrdp.ini]   key_file            : /etc/xrdp/key.pem
 - [sesman.ini] SessionSockdirGroup : xrdp

-Info- runtime_user 'xrdp' appears to exist
-Info- runtime_group 'xrdp' appears to exist
-Info- xrdp.ini and sesman.ini agree on group ownership
-Info- /etc/xrdp/rsakeys.ini has correct permissions
-Error- /etc/xrdp/cert.pem is writeable by xrdp:xrdp
-Info- /etc/xrdp/key.pem is read-only for xrdp:xrdp

-Summary- 1 error(s) found. Please correct these and try again
$ sudo chmod 640 /etc/xrdp/cert.pem
$ sudo ./xrdp-chkpriv
Settings
 - [xrdp.ini]   runtime_user        : xrdp
 - [xrdp.ini]   runtime_group       : xrdp
 - [xrdp.ini]   certificate         : /etc/xrdp/cert.pem
 - [xrdp.ini]   key_file            : /etc/xrdp/key.pem
 - [sesman.ini] SessionSockdirGroup : xrdp

-Info- runtime_user 'xrdp' appears to exist
-Info- runtime_group 'xrdp' appears to exist
-Info- xrdp.ini and sesman.ini agree on group ownership
-Info- /etc/xrdp/rsakeys.ini has correct permissions
-Info- /etc/xrdp/cert.pem is read-only for xrdp:xrdp
-Info- /etc/xrdp/key.pem is read-only for xrdp:xrdp

-Summary- Permissions appear to be correct to run xrdp unprivileged

It's rather obvious, looking back on it now.

See also https://github.com/neutrinolabs/xrdp/wiki/Running-the-xrdp-process-as-non-root which I've updated in anticipation of merging this.

so the script is installed, but in /usr/local/share/xrdp as it's not something the user will be running regularly.

Okay, I see. rsakeys.ini check also LGTM. It would be very nice if xrdp-chkpriv script generated colored output but it can be added later and it doesn't block this PR get merged.


Add Llama as a pet

🦙
Llama are cool these days. We need a dromedary companion.
Is there any guidance or docs in the repo somewhere around what's required to add a new pet in terms of code and animation frames/cycles (and how the existing ones were produced in terms of software and other art guidance)?

Updated section in the readme.

Drawing and Animations

If you want to contribute improvements to the animations, additional pet colors or even new pets, clone the repository and work in the media/ folder.

Most drawings are done in aseprite because you can edit GIFs directly. However, you are free to use any tool to make the animations. Animations should be 8 frames per second. The style of the extension is to have pixelated creatures (although not limited to an 8-bit color canvas).

Don't worry if you don't have enough coding experience to add the changes to the extension to support the new animations, we can help you with that.

The minimum set of behaviors is:

standing
walking
running/chasing
holding green ball


Ad-hoc academy

dear academy peeps,
We have 31 people that qualified but won't be able to make it into the Academy. That's enough for a community. I'm wondering if we can get a group of 3 or 4 of them to organize a sidecar academy where they use the open-source material and just run as similar-as-possible course that lags behind a month or so from batch3.
Right now there are so many people that want in and aren't gonna get the chance to learn what we have to teach. It's kind of breaking my heart. We should figure something out to help.
A penny golden dragon for your thoughts?

My 2 ~cents~ ~dragons~ lizards:
We are going to be stretched close to capacity, but it would indeed be cool to have them self-organize.
Suggested:

We try to get someone from last year's alumni to take this up
A few applicants take the initiative of managing this day to day  (we can live stream the talks maybe?)
We invite them to the community events, but don't do much more than that

This may sound cold, but I think we have an obligation to the students that is not trivial to meet, and anything that may distract from that would be risky.

agreed, we don't have any additional resources to spend on this. they would have to do it themselves.
Why someone from last year alum and not someone from the group that just applied? would probably be a lot easier to recruit from there and stay involved.

The logic for the alumni is just that they've gone through it, so would make better "informal instructors"

I've spoken to a few of the students that didn't get in so far. I have one, possibly two so far that are interested in organizing an ad-hoc academy. more news as soon as I have it.

After this happens, I'll try to reach out to some Alum from batch2.

So this didn't happen. bummer sauce, we'll work on it for next time.

I think it's for the best. We need to make this excellent for the 50, and anything else needs to come from someone else (students self organising would be a dream)


Import Variables from YAML file may generate variables with illegal Python names

Importing variables directly from a YAML file is a nice feature. However, tools like stress-ng generate YAML files containing top-level keys containing hyphens (dashes) which are interpreted as the minus sign and therefore generate inaccessible variables (believe me, I tried).
To the best of my knowledge, a YAML file containing such keys is valid.
Therefore, the burden is on Robot to allow importing such YAML files, perhaps changing the '-' to '_' during import.
A simple way to generate one such YAML file is:
stress-ng --matrix 0 --tz -t 5 --times --metrics --yaml matrix.yaml
See also #https://github.com/robotframework/RIDE/issues/1945

system-info:
      stress-ng-version: 0.13.12
      run-by: fab
      date-yyyy-mm-dd: 2023:03:23
      time-hh-mm-ss: 10:05:14
      epoch-secs:<PHONE_NUMBER>
      hostname: austin-bbq
      sysname: Linux
      nodename: austin-bbq
      release: 5.15.0-67-generic
      version: '#74-Ubuntu SMP Wed Feb 22 14:14:39 UTC 2023'
      machine: x86_64
      uptime: 1536302
      totalram:<PHONE_NUMBER>0
      freeram:<PHONE_NUMBER>0
      sharedram: 11964416
      bufferram:<PHONE_NUMBER>
      totalswap:<PHONE_NUMBER>
      freeswap:<PHONE_NUMBER>
      pagesize: 4096
      cpus: 8
      cpus-online: 8
      ticks-per-second: 100

thermal-zones:
    - stressor: matrix
      acpitz0:   27.80
      acpitz1:   28.80
      x86_pkg_temp:   37.08

Ok, that ought to be valid YAML. What's the error you get? How do you import the variable file?

There are two ways that I know of (per documentation):
The first is like so:
*** Settings ***
Variables    stress.yaml

The second is dynamically, using the Import Variables keyword.
There is no way then to access a variable named ${thermal-zones} for example.

How does it fail? Does the import fail or cannot you just access the variable? What error do you get?

No updates. Closing.


Issue #174 - use console.error instead of console.log

As discussed in issue #174, we had to log errors in err.log file in our node.js app.
Here’s a pull request which fixes that.

Thanks @paulgreg !


UVI Request

--- UVI JSON ---
{
  "vendor_name": "Linux",
  "product_name": "Kernel",
  "product_version": "versions from  to before v5.10.52",
  "vulnerability_type": "unspecified",
  "affected_component": "unspecified",
  "attack_vector": "unspecified",
  "impact": "unspecified",
  "credit": "",
  "references": [
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=43d1aaa1965f9b58035196dac49b1e1e6c9c25eb"
  ],
  "extended_references": [
    {
      "type": "commit",
      "value": "43d1aaa1965f9b58035196dac49b1e1e6c9c25eb",
      "note": "fixed"
    }
  ],
  "reporter": "joshbressers",
  "reporter_id": 1692786,
  "notes": "",
  "description": "iommu/arm-smmu: Fix arm_smmu_device refcount leak in address translation\n\nThis is an automated ID intended to aid in discovery of potential security vulnerabilities. The actual impact and attack plausibility have not yet been proven.\nThis ID is fixed in Linux Kernel version v5.10.52 by commit 43d1aaa1965f9b58035196dac49b1e1e6c9c25eb. For more details please see the references link."
}
--- UVI JSON ---

This issue has been assigned UVI-2021-1001273


Crshanks fix groups without users

Fixes issue #9.
Allows for groups with no users.
Also, now no longer returns cancelled accounts.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


BE-708 added cases to handle filter and sort for json fields.

Ticket: https://teamheadlight.atlassian.net/browse/PD-129
Approach: Try prototyping SQL queries with Foxhound. It works we need to add support to the meadow filter.
var _Fable = require('fable').new();
var libFoxHound = require('foxhound');

var tmpQuery = libFoxHound
.new(_Fable)
.setDialect('MySQL')
.setScope('Document')
.addFilter('length(FormDataJson)', '1', '>', 'AND', 'FormDataJson_length')
.addFilter("JSON_EXTRACT(FormDataJson, '$.Header.SampleMaterial')", 'Profile Testing', '=', 'AND','jsonFieldKey');

 console.log(tmpQuery.buildReadQuery().query.body);
 // ----
var tmpQuery = libFoxHound
.new(_Fable)
.setDialect('MySQL')
.setScope('Document')
.setDataElements(['IDDocument', 'CreateDate', 'FormDataJson', "FormDataJson->'$.Header.SampleMaterial'"])
.addFilter('length(FormDataJson)', '1', '>', 'AND', 'FormDataJson_length')
.setSort([{ Column: "FormDataJson->'$.Header.SampleMaterial'", Direction: 'Descending' }]);

console.log(tmpQuery.buildReadQuery().query.body);

generates:
   SELECT `IDDocument`, `CreateDate`, `FormDataJson` FROM `Document` WHERE length(FormDataJson) > :FormDataJson_length_w0 AND JSON_EXTRACT(FormDataJson, '$.Header.SampleMaterial') = :jsonFieldKey_w1;
   ---
   SELECT `IDDocument`, `CreateDate`, `FormDataJson`, `FormDataJson->'$`.`Header` FROM `Document` WHERE length(FormDataJson) > :FormDataJson_length_w0 ORDER BY FormDataJson->'$.Header.SampleMaterial' DESC;

After which added the case stmts to support new filter and sort operations in json fields.
--
New changes:
https://localhost/1.0/Documents/FilteredTo/FSJF~FormDataJson,Header.SampleMaterial~DESC~0
SELECT `Document`.*
FROM `Document`
WHERE  LENGTH(FormDataJson) > "1" AND
`Document`.Deleted = 0
ORDER BY FormDataJson->'$.Header.SampleMaterial' DESC, DocumentDate DESC LIMIT 250;

https://localhost/1.0/Documents/FilteredTo/FBJV~FormDataJson,Header.SampleMaterial~EQ~Profile Testing
SELECT `Document`.*
FROM `Document`
WHERE  LENGTH(FormDataJson) > "1" AND
JSON_EXTRACT(FormDataJson, '$.Header.SampleMaterial') = "Profile Testing" AND
`Document`.Deleted = 0
ORDER BY DocumentDate DESC LIMIT 250;

Steps:
to repro locally,

copy the latest changes of this repo to mpi_api node_modules
cp -r /Pavia/meadow-filter/source/* /Pavia/mpi_api/node_modules/meadow-filter/source
and touch any file in mpi_api may be/Pavia/mpi_api/ts_source/bundles/contentmanagement/Documents.ts, so that changes are picked up by the watcher.
check query in docker logs
docker logs pavia-headlight-api-1 -n 100 --follow

Tests:
check: sort the filtered documents and then return the pagination results back: 0th matches 10th record
https://localhost/1.0/Documents/FilteredTo/FBJV~FormDataJson,Header.SampleMaterial~EQ~Profile Testing~FSJF~FormDataJson,Header.SampleMaterial~DESC~0/10/10
https://localhost/1.0/Documents/FilteredTo/FBJV~FormDataJson,Header.SampleMaterial~EQ~Profile Testing~FSJF~FormDataJson,Header.SampleMaterial~DESC~0/0/20

Tried repro steps and since I cannot upload json payloads here (github doesn't allow?) I added comments on your ticket. The functionality I can confirm works.
I played with the filters and decided to sort by a different json property than what's in the FSJF filter There's a slight quirk in that JCSequenceNumber "9" will appear before "88". This is from javascript's lexicographic sorting when it comes to strings. I think the form data, almost all values are strings. Not sure if we need to consider "fixing" this, or just to document it well. --I think this would be out of scope for the ticket though.
The endpoint I tried:
https://localhost/1.0/Documents/FilteredTo/FBJV~FormDataJson,Header.SampleMaterial~EQ~Profile Testing~FSJF~FormDataJson,Header.JCSequenceNumber~DESC~0/10/10

closing in favor of #2


Add support for filename searches

Issue Name
FilenameSearch
Summary
Want to efficiently search through multi million filenames. Needs index on Datablock dataFileList.path  documents

Implemented in the development branch


Issue playing url w/o extention

Думаю тут для многих эта проблема возникнет, так что я по английски.
So, if I use your code as is, everything seems fine up until I try to start playing player.play().
I found out that AVURLAsset requires an extension like .mp3 in a url. In my case though, I don't use any extensions. My urls are of this form localhost:8000/stream?someId=<id>, and  AVPlayer with AVURLAsset won't play the audio from such link (thanks to Apple).
Right now, I doing it a very hacky way by adding the following:
let asset = AVURLAsset(url: urlWithCustomScheme.appendingPathComponent("/fake.mp3"))
And then in ResourceLoader implementation, I remove fake.mp3 path:
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
...
guard let interceptedUrl = loadingRequest.request.url?.deletingLastPathComponent()
...

Basically adding .mp3 extention for AVURLAsset, and then removing in ResourceLoader, so that ResourceLoader could actually get my audio file.
I'm looking for a nice workaround. You have any ideas?

I've been asked for the solution several times already. And each time I responded with the workaround that you've described.
With the current implementation, I can't think of any "proper" way to deal with urls that don't end with an extension. The reason for this is that AVPlayerItem, that is the superclass of the CachingPlayerItem, determines the type of the file to play based on the file's url extension. If we omit an extension, there's simply no way for AVPlayerItem to tell how to treat the file.
It seems like it's a common issue. I'll leave it open for now.


sensors: introduce kconfig named choices

Use Kconfig specific object "named choices".
Aim is to allow to define config choices selection in Kconfig.*
files instead of _defconfig and hence allow to keep flags
activation conditional.
When not specified, default choice value is the first option defined.
Hence, options order have been changed to keep default choices
default value unchanged.
Signed-off-by: Erwan Gouriou<EMAIL_ADDRESS>

@galak , can we merge this one?
It solves 2 annoygin warning messages when building some boards:
warning: HTS221_TRIGGER_NONE (defined at drivers/sensor/hts221/Kconfig:42) was assigned the value
'y' but got the value 'n'. You can check symbol information (including dependencies) in the
'menuconfig' interface (see the Application Development Primer section of the manual), or in the
Kconfig reference at http://docs.zephyrproject.org/reference/kconfig/CONFIG_HTS221_TRIGGER_NONE.html
(which is updated regularly from the master branch). See the 'Setting configuration values' section
of the Board Porting Guide as well.
warning: LIS3MDL_TRIGGER_NONE (defined at drivers/sensor/lis3mdl/Kconfig:52) was assigned the value
'y' but got the value 'n'. You can check symbol information (including dependencies) in the
'menuconfig' interface (see the Application Development Primer section of the manual), or in the
Kconfig reference at
http://docs.zephyrproject.org/reference/kconfig/CONFIG_LIS3MDL_TRIGGER_NONE.html (which is updated
regularly from the master branch). See the 'Setting configuration values' section of the Board
Porting Guide as well.

^^ @galak

@ulfalizer : Thanks for the review. Change updated


Reset form after submit

Is there any way to reset form after submitted?
I  tried following way but no luck  :(

export default function AccountsIndexPage() {
  const data = useLoaderData<LoaderData>();
  let transition =  useTransition();
  let isAdding = transition.state === "submitting";
  let formRef = useRef<HTMLFormElement>(null);
  useEffect(() => {
    if(!isAdding)  {
      formRef.current?.reset();
    }
  }, [isAdding]);
  return (
    <Panel>

      <DataTable>

        <Form schema={schema} ref={formRef} className="valid-form flex flex-wrap flex-row -mx-4 mb-6" id="account-form">
          {({ Field, Errors, Button, register }) => (

          ....

In my console I get following errors:
react-dom.development.js:86 Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

Check the render method of `AccountsIndexPage`.
    at Form3
    at div
    at div
    at div
    at div
    at div
    at div
    at DataTable (http://localhost:5000/build/_shared/chunk-6HY25IE3.js:878:22)
    at div
    at Panel (http://localhost:5000/build/_shared/chunk-6HY25IE3.js:847:18)
    at AccountsIndexPage (http://localhost:5000/build/routes/dashboard/organization/accounts/index-2NPI7QXN.js:56:16)
    at RemixRoute (http://localhost:5000/build/_shared/chunk-3WT6HRTL.js:2552:3)
    at Outlet (http://localhost:5000/build/_shared/chunk-3WT6HRTL.js:675:26)

Is there any option to automatically reset form after submitted ?

Thank for reply :) I make it work with below code. I replaced loading with submitting.
<Form
  schema={schema}
  onTransition={
    ({transition, reset})  => {
      if(
        transition.state === 'submitting' &&
        transition.type === 'actionSubmission'
      ) {
        reset();
      }
    }
  }>

BTW it would be great if it's as an option 🔥

@zolzaya , I'm glad it worked for you!
Could you elaborate your last comment? What would be the API you thought about?

@gustavoguichard, I just created #69 based on @zolzaya's suggestion. @zolzaya, is that what you had in mind?

Thanks guys this  is what I  wanted.


Menu > Versions: Page not found

The current Versions page cannot be found. Can you please fix the link / URL.

This is fixed - thanks to @santiagoejm


Setting the mode in the configuration file does not work

Describe the bug
I would like to set the vite mode in the configuration file as follows, but it seems that this does not work for electron-vite
export default defineConfig(() => {
  main: {
    mode: 'sandbox' <-- this doesn't work, it starts the app with development mode
  }
}

Electron-Vite Version
2.1.0
Electron Version
25.9.8
Vite Version
5.2.8
Validations

[X] Follow the Code of Conduct.
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.

Hi @alex8088, any update on this?

https://electron-vite.org/guide/cli
electron-vite dev --mode sandbox

@alex8088 I realize this, but shouldn't it also work from the configuration file if vite allows you to manually override the mode?
I would like to set the mode based on variables, for example, as follows:
export default defineConfig(() => {
  main: {
    mode: process.env.MODE <-- this doesn't work, it starts the app with development mode
  }
}

@alex8088 I tested this on Vite and it works as expected. import.meta.env.MODE returns the value I set in the mode field in the configuration file.

Hi @alex8088, can I expect my fix to be reviewed soon? It's a blocker for me at the moment. Thanks!

@krystianotto release soon

@alex8088 When can we expect a release for this? Thanks!


Add hack3rwitch

Added hack3rwitch to streamers.csv

Waiting to confirm the consistency of the content on the channels.

Majority on content isn't yet cyber-focused. Trying to keep the list curated to mainly infosec things so when people come to the list they find Infosec content and not for e.g. people playing Sea of Thieves in the "Just Chatting" category (when there's a category to play that game in) or Tarot??? card readings. All that said, appreciate the contribution, and looking forward to more -- thanks!


Read 32 bit floating point holding registers

Hi all,
I'm trying to read a sequence of 32 bit floating point holding registers.
Can someone give me an example of how to do that?
I can read those registers but they are represented as 16 bit registers...

You can call to_32f like this:
slave.holding_registers[0..1].to_32f
=> [1.345676]

You will get an array of floats, since you can read more than 2 registers at once, to_32f will convert them all as long as they are multiples of 2.

Thanks @fernandoluizao,
I tried with .to_32f but I get a wrong value. The real value set on modbus slave is 0.5 but calling .to_32f I get [2.260014163263065e-41].
Any idea about the reason?

Array#to_32f assumes big endian, your device seems to use little endian.
See https://github.com/rmodbus/rmodbus/pull/50/files for an alternative.
I'm thinking about remove those extensions, and implement https://github.com/rmodbus/rmodbus/issues/19, as I think this conversions are outside the scope of a modbus library.
But for now, you can monkeypatch Array (I know, I know...)

Thanks @fernandoluizao,
the Array patch works. For the moment, the solution may be acceptable.


[CI:TOOLING] Validate: Catch attempted re-use of IMG_SFX

IMG_SFX values need to change for every image build, even within the
same PR.  Attempt to catch re-use of a suffix before starting the lengthy
build process (which will eventually fail on a duplicate).  Check the
imgts image simply because it builds very early in cirrus-ci and cannot
be skipped with a "no_*" PR label.

Example validation failure due to no IMG_SFX file change.

Example validation failure due to IMG_SFX re-use.

Example validate pass w/ TOOLING-only update (magic string) + new IMG_SFX value.


Implement AA byPair.

Resurrected from https://github.com/D-Programming-Language/druntime/pull/574.
The basic idea is to provide this functionality in druntime, and if people insist, add a wrapper to Phobos that returns Tuples as people clamored for last time. Or just recommend users add this one-liner wrapper to their own code:
auto r = aa.byPair().map!(a => tuple(a.key, a.value));

then you'll a Tuple range out of it for no extra charge. :-)

This is getting really annoying... I think we should just forget about tuple support in druntime, it's completely broken anyway, we should just rename this method byKeyValue, and leave byPair to Phobos where it belongs. I'm sick and tired of this stalemate. Either that, or I'll just close this PR and let somebody else take over. We still haven't made any progress after all this time, and I've stopped caring.

This is getting really annoying... I think we should just forget about tuple support in druntime, it's completely broken anyway, we should just rename this method byKeyValue, and leave byPair to Phobos where it belongs. I'm sick and tired of this stalemate. Either that, or I'll just close this PR and let somebody else take over. We still haven't made any progress after all this time, and I've stopped caring.

I agree with @Dicebot. Let's move forward with the byKeyValue idea. We can rename/add it later if tuple support becomes possible.
The idea that you can't range over an AA with both key and value when both are imminently accessible is ridiculous.

This is getting really annoying...

Sorry about the push for tuples, I didn't realize how messy it currently is, I thought it would be easier.

Renamed to byKeyValue. I'll write up a byPair implementation for Phobos later.

LGTM.
Can you change commit comment to "Implement AA byKeyValue"?
Also, do you want to write an update to the online docs (apologies if you have already, I don't get notified of those)?
We should wait until @dicebot and @MartinNowak examine before pulling. This is going to be a huge improvement, but obviously should be done with care.

LGTM. Seems simple enough not to cause any worries.

Reworded.
I haven't written up the doc changes yet; will submit it later. Thanks for the reminder, though, I totally forgot we need to update the docs!

Here's the doc pull: https://github.com/D-Programming-Language/dlang.org/pull/743

Auto-merge toggled on

If I compile this:
void main() {
    import std.stdio;
    auto aa = [1:2, 3:4];
    foreach (pair; aa.byKeyValue)
        pair.writeln;
}

I get:
C:\dmd2\src\druntime\import\object.di(555,28): Error: undefined identifier p
test.d(5,22): Error: template instance object.byKeyValue!(int[int], int, int) error instantiating

C:\dmd2\src\druntime\import\object.di(555,28): Error: undefined identifier p

Wow.  The dangers of copy+paste.  Wasn't someone working on generating object.di automatically?

Fixed: https://github.com/D-Programming-Language/druntime/pull/1077

A problem with a constant key-value pair:
void main() {
    auto aa = [1:2, 3:4];
    foreach (const t; aa.byKeyValue) {
        auto k = t.key;
        auto v = t.value;
    }
}

test.d(4,18): Error: mutable method object.byKeyValue!(int[int], int, int).byKeyValue.Result.front.Pair.key is not callable using a const object
test.d(5,18): Error: mutable method object.byKeyValue!(int[int], int, int).byKeyValue.Result.front.Pair.value is not callable using a const object

A problem with a constant key-value pair:

accessors in Result should be inout. @quickfur I can handle this if you want.

Done: https://github.com/D-Programming-Language/druntime/pull/1079

Was it impossible to make that compatible with the existing tuple expansion in foreach?
Because this doesn't work currently.
foreach (k, v; aa.byKeyValue.filter!pred)
{}

The consensus was not to invent a tuple that doesn't pass std.traits.isTuple. So it could be done, but probably not without issues.
You can wrap the result in a map!(a => tuple(a.key, a.value)) to get the behavior you want.

@MartinNowak  Try this instead:
import std.array : byPair;
foreach (k, v; aa.byPair.filter!pred) { ... }

Is there a reason why .length isn't supported?

I just didn't think about it at the time. Please file an enhancement in bugzilla.

Although on second thoughts, we might have trouble with .length if somebody modifies the AA while iterating over it...

Yeah, keeping track of length means saving an arbitrary integer to go along with the range to count down as you pop front. For the times it would be used, I think it's not worth the added footprint.

we might have trouble with .length if somebody modifies the AA while iterating

We don't need to worry about that, it's an invalid range at that point.


Object ReplicaSet not found in api on startup of deploytime exporter

See the following traceback when Pelorus exporter for deploy time starts -
Traceback (most recent call last):
  File "deploytime/app.py", line 106, in <module>
    REGISTRY.register(DeployTimeCollector(namespaces))
  File "/opt/app-root/lib64/python3.8/site-packages/prometheus_client/registry.py", line 26, in register
    names = self._get_names(collector)
  File "/opt/app-root/lib64/python3.8/site-packages/prometheus_client/registry.py", line 66, in _get_names
    for metric in desc_func():
  File "deploytime/app.py", line 23, in collect
    metrics = generate_metrics(self._namespaces)
  File "deploytime/app.py", line 78, in generate_metrics
    v1_replicationsets = dyn_client.resources.get(api_version='extensions/v1beta1', kind='ReplicaSet')
  File "/opt/app-root/lib64/python3.8/site-packages/openshift/dynamic/discovery.py", line 246, in get
    raise ResourceNotFoundError('No matches found for {}'.format(kwargs))
openshift.dynamic.exceptions.ResourceNotFoundError: No matches found for {'api_version': 'extensions/v1beta1', 'kind': 'ReplicaSet'}

@malacourse can you take a look?

@willowmck we just recently merged some code to handle these various types. I think the issue is that we didn't handle the cases that all clusters won't support all apiVersions. We'll need to do some exception handling in this block: https://github.com/redhat-cop/pelorus/blob/master/exporters/deploytime/app.py#L65-L80

I will add handling for this case.

Thanks guys for hopping on this one so quickly!  @etsauer I can wait for @malacourse fix as I wanted to add some debugging around the commit time exporter.


Not using configFile and requires full path to ignored files

I have the following (configuration)

It is NOT using the include/ignore files form .sass-lint.yml file
In order to properly ignore files, I must use the full path (see first entry) where as the format for second entry (yes they are different files, just testing various options).
The first entry is ignored correctly (notice full path)
The second entry is NOT ignored

    new SassLintPlugin({
      configFile: '.sass-lint.yml',
      ignoreFiles: [
        '/Users/mikeerickson/Documents/Projects/angular-sandbox/src/sass/mixins/text.sass',
        './src/sass/modules/_reset.scss'
      ]
    }),

Here is my result when running webpack
...
/Users/mikeerickson/Documents/Projects/angular-sandbox/src/sass/modules/_reset.scss
   1:6   warning  Selectors must be placed on new lines                           single-line-per-selector
   1:12  warning  Selectors must be placed on new lines                           single-line-per-selector
...

As you can see, the _reset.scss file is still being checked, despite its defined ignore item

Well, looks like pilot error (for ingnore option).  But still curious about reading files from .sass-lint.yml file
From the docs (sorry didn't read this thoroughly)

ignoreFiles: Array of files to ignore, must be full path, Default: none

So, the question still remains.  If I have the following in .sass-lint.yml file, should plugin use these entires?
files:
  include:
    - "./src/sass/**/*.s+(a|c)ss"
  ignore:
    - "./src/sass/disabled/**/*.s+(a|c)ss"
    - "./src/sass/modules/*.s+(a|c)ss"
    - "node_modules/**/*.s+(a|c)ss"

We aren't parsing the sasslint config for ignores so that's might not work (haven't tested it TBH).

Why the plugin is not reading the ignored files from config file?

@idangozlan I'm sorry, but we are no longer doing active development on this plugin. Thus I cannot answer that question.


Added willReveal and willHide delegate methods

resolves #30
@teodorpatras what's your suggestion for this methods for UIPanGesture?
Now it works when pan is ended and before didHide/didReveal methods... but while panning and side controller becomes visible no willReveal is called, so nor willHide.
Support me with your suggestions on this functionality... Thanks.

@teodorpatras @piv199 Could you merge this PR please?


Upgrade Java AppEngine Support From 1.8.2 to 1.8.3

This commit upgrades the Java server from 1.8.2 to 1.8.3. There were no changes to AppScale java files so it looks like we get this one for free! Original Google commit: https://code.google.com/p/googleappengine/source/detail?r=376 .
According to the offical release notes the following changes were made:

Published a major rewrite of the Search API documentation. Please see: https://developers.google.com/appengine/docs/java/search
Interfacing into the Task Queue REST API no longer requires including "s~" at the beginning of the project name.
Fixed an issue with the Mail API, email addresses that contain encoded newlines as specified in rfc2047 are now parsed correctly.
Fixed an issue with ChannelService.sendMessage() failing when a client id has 3 or more dashes.
Fixed an issue with the Channel API send_message function not working in the SDK.
Fixed an issue with the Local Channel service failing to properly validate tokens.
Fixed an issue with enabling cloud integration for existing apps.
https://code.google.com/p/googleappengine/issues/detail?id=9602
Fixed an issue with the Datastore Admin UI failing to load due to the app having too many kinds.
https://code.google.com/p/googleappengine/issues/detail?id=9749

OCD: https://ocd.appscale.com:8080/job/Daily Build/835/

OCD: https://ocd.appscale.com:8080/job/Daily Build/840/


Python ResultsReader class is incredibly slow

It's possible that I don't understand what all the ResultsReader class is doing, so take this issue with a grain of salt.
When using the ResultsReader class to get results from a Splunk search, as indicated here: https://github.com/splunk/splunk-sdk-python/blob/master/splunklib/results.py#L173-L181, it takes an incredibly long time to get all the results. Using the jobs.results function is orders of magnitude faster.
For example, on a search with 175k results, it takes 4+ minutes to get the results with ResultsReader objects, and 3.7 seconds with the results function. The following snippet shows what I'm talking about:
import splunklib.results as results
import splunklib.client as client
from datetime import datetime
import json

splunk_object = client.connect(
    host="host",
    port="port",
    username="username",
    password="password",
    app="app",
    verify=True,
    autologin=True)

spl = '| makeresults count=175000'

splunk_search_kwargs = {"exec_mode": "blocking",
                        "earliest_time": "-48h",
                        "latest_time": "now",
                        "enable_lookups": "true"}

splunk_search_job = splunk_object.jobs.create(spl, **splunk_search_kwargs)

start_time_json = datetime.now()
# Get the results from the Splunk search
search_results_json = []
# log_general.debug("Getting Splunk search results.")
get_offset = 0
max_get = 49000
result_count = int(splunk_search_job['resultCount'])
while (get_offset < result_count):
    r = splunk_search_job.results(**{"count": max_get, "offset": get_offset, "output_mode": "json"})
    obj = json.loads(r.read())
    search_results_json.extend(obj['results'])
    get_offset += max_get
# log_general.debug("Found %d results" % len(search_results))

end_time_json = datetime.now()

start_time = datetime.now()
# Get the results from the Splunk search
search_results = []
# log_general.debug("Getting Splunk search results.")
get_offset = 0
max_get = 49000
result_count = int(splunk_search_job['resultCount'])
while (get_offset < result_count):
    rr = results.ResultsReader(splunk_search_job.results(**{"count": max_get, "offset": get_offset}))
    for result in rr:
        if isinstance(result, results.Message):
            # Diagnostic messages may be returned in the results
            print '%s: %s' % (result.type, result.message)
        elif isinstance(result, dict):
            # Normal events are returned as dicts
            search_results.append(result)
    get_offset += max_get
# log_general.debug("Found %d results" % len(search_results))

end_time = datetime.now()

print ("ResultsReader time: %s" % (end_time-start_time).seconds)
print ("json_results time: %s" % (end_time_json-start_time_json).seconds)

Is ResultsReader doing anything special that I miss out on by just getting the results is json mode directly? I know that ResultsReader uses XML under the hood, but that doesn't really matter to me; at the end of the day, I just need the results in a python object.

@mew1033 - thanks for bringing this to our attention and thanks for the snippet demonstrating your issue! We'll take a look.

Great suggestion @mew1033 . Ran into the same issue pulling back ~12k results. My entire script run (I'm less thorough than you) took 74 seconds using the ResultsReader, and 3.6 seconds with results directly.

@dveuve @mew1033 - I would suggest to run a trace on the PID to find out what it is actually doing

Ran into this issue pulling 15k results. ResultsReader v slow [4 minutes], straight JSON ~5 seconds.

Ditto same issue, plus my Mac's CPU goes to 98-99% every time on the ResultsReader call.

Workarounds:

Use job.export instead of job.create or job.oneshot
Use a custom streaming wrapper in conjunction with io.BufferedStream
Using both of these improved my performance 100x+
Details:
[https://answers.splunk.com/answers/114045/python-sdk-results-resultsreader-extremely-slow.html]

Hello there! thanks for these helpful tips... I am having the same issue and I am not quite sure how to use the proposed workaround results.ResultsReader(io.BufferedReader(ResponseReaderWrapper(rs))) mentioned above.
I am using a simple service.jobs.export() and my goal is to actually save the data to a dataframe. At the moment I am using
exportsearch_results = service.jobs.export(searchquery, **kwargs_export)
reader = results.ResultsReader(exportsearch_results)

thislist = []
for item in reader:
 thislist.append(item)

and then I create the dataframe using the list. This is quite slow.
Any suggestion greatly appreciated.
Thanks!!

@randomgambit I am having the same performance problem as well. I am having a similar setup where I have service job export and reading result from ResultsReader. I need to write all those records into the file.
It takes 10 hours to process 1 Million records. ridiculously slow.
Can someone offer a solution to this issue pls?

My solution is to just not use ResultsReader at all. Just use the raw .results method and grab it as json. Something like this:
import json

spl = 'your search goes here'

splunk_search_kwargs = {"exec_mode": "blocking",
                        "earliest_time": "-48h",
                        "latest_time": "now",
                        "enable_lookups": "true"}

splunk_search_job = splunk_object.jobs.create(spl, **splunk_search_kwargs)
search_results_json = []
get_offset = 0
max_get = 49000
result_count = int(splunk_search_job['resultCount'])
while (get_offset < result_count):
    r = splunk_search_job.results(**{"count": max_get, "offset": get_offset, "output_mode": "json"})
    obj = json.loads(r.read())
    search_results_json.extend(obj['results'])
    get_offset += max_get

@mew1033 we have introduced a JSONResultsReader in our latest Python SDK release 1.6.19, it has a better performance as compared to the existing ResultsReader. We would suggest you to use the new feature available and let us know if that improves performance for your application.
@vdineshTM , @randomgambit and @bretlowery - we would suggest you all as well to utilise the JSONResultsReader in your applications and let us know if in case of any issues or it improves performance in your applications

我的解决方案是根本不使用ResultsReader。只需使用原始.results方法并将其作为 json 抓取即可。像这样的东西：
import json

spl = 'your search goes here'

splunk_search_kwargs = {"exec_mode": "blocking",
                        "earliest_time": "-48h",
                        "latest_time": "now",
                        "enable_lookups": "true"}

splunk_search_job = splunk_object.jobs.create(spl, **splunk_search_kwargs)
search_results_json = []
get_offset = 0
max_get = 49000
result_count = int(splunk_search_job['resultCount'])
while (get_offset < result_count):
    r = splunk_search_job.results(**{"count": max_get, "offset": get_offset, "output_mode": "json"})
    obj = json.loads(r.read())
    search_results_json.extend(obj['results'])
    get_offset += max_get

Thank you for solving my problem, but I put the returned result directly into the for loop:
            for item in results.JSONResultsReader(job_result):
                result_list.append(item)

However, i can only get up to 50,000 pieces of data. After seeing your code, I found that you can adjust the results of different segments by passing in parameters such as offset (the official document does not give detailed instructions).


Translate List.filter as if user had written where; and List.map to yield

Translate List.filter f records as if user had written from r in records where (f r). This also means translating to the same relational algebra.

Fixed in 3b26fb7b0fcb4b9ce510ebe5a377602f639a7081.


[WIP] Fix eposing for passthrough routes

What type of PR is this?
/kind bug
What this PR does / why we need it:
When exposing passthrough routes we can't set TLS or the exposing route won't get admitted. We shouldn't need to set this even normally, as I recall that used to be a hack for old router bug.
https://github.com/openshift/router/blob/d3d2388956e569767be27996cebbcaa60be8930c/pkg/router/controller/hostindex/activation.go#L129-L133
Which issue(s) this PR fixes:
Special notes for your reviewer:
OpenShift fixes:

[ ] https://github.com/openshift/origin/pull/25676

Does this PR introduce a user-facing change?:
The controller now supports handling passthrough Routes.

Hi Gang, does this mean passthrough route certs won't work at all until this merge is in place?  Been running in to issues trying to get one working, hoping this will fix it.  Thanks!

yep, you need this patch. will try to get to it next time. The last slot I had was taken by the work on openshift-acme-operator but this is important too.

openshift issues links: https://github.com/openshift/origin/pull/25676

Just wanted to touch back in on this to maybe prevent the staleness checker from closing this out 😁
Is there an image we could use to test out the branch with the fix?  Thanks!

Hi, what is the status of this? Does this MR fix the issue or does something also need to be fixed in OpenShift?


Consider re-exporting stuff from submodules

It looks like most examples start with long lines of the form
using Chmy, Chmy.Architectures, Chmy.Grids, Chmy.Fields, Chmy.BoundaryConditions, Chmy.GridOperators, Chmy.KernelLaunch

This looks like a lot of copy&paste boilerplate code to me. Would it make sense to re-export stuff from Chmy itself so that one can just write
using Chmy

?

Agree

Hi @ranocha , thanks for the observation =) I totally agree that all important stuff should be re-exported, I was hesitating a bit to do so until the API becomes somewhat stable. I'll introduce several breaking changes in the coming weeks, and add exports to the breaking release.

Addressed by #51


grunt zip contains subfolders

I am created a yeoman project which I plan to zip and deploy to an AWS s3 bucket.
I'm taking everything within the 'dist' or distribution folder, zipping it up, and I've noticed that it does in fact create a *.zip file and place it in the correct destination path.
My problem is that when I upzip said *.zip file, it includes a 'dist' folder at the top of the folder tree and then beneath that folder are all of the compressed web files for the project, the goodies of the project.
I would like to place all of the compressed web files at the top level of the project, instead of being contained within the dist folder.
Is there a recommended way to accomplish this task?

This is a duplicate of #22. To remove the dist/ while zipping, we can use the cwd option to indicate that we want to copy the contents of dist/ but not dist/ itself:
{
  zip: {
    cwd: 'dist/',
    src: '**/*',
    dest: 'dist.zip'
  }
}

I just realized that I need a different directory structure.  Instead of moving all of the "goodies" up a folder level, I need to replace the dist folder with a folder of a different name, and keep the current structure.  Is there a way to accomplish this?  I appologize for the confusion.  My understanding of the file folder structure that was needed for this project was incorrect.

cwd is explained in the documentation with an example:
https://github.com/twolfson/grunt-zip/tree/0.16.2#using-cwd
For the renamed folder case, you can:

Rename/copy the folder to new-folder and use the original configuration you had
Use router to dynamically rename the path (e.g. filepath.replace(/^dist/, 'new-folder'))

Documentation can be found here: https://github.com/twolfson/grunt-zip/tree/0.16.2#using-router

I did get it to work, but I needed to modify src: '/ *' to src: 'dist/', instead of what you suggested above because this code allows me to grab only the files from my distribution folder and keep them at the top level of my *.zip file.
Also, the suggestion above does not match the literature in the readme.md file.  Using src: '*/', will grab a lot of extra files that I do not need (outside of my distribution folder).
Also, I noticed that the readme.md file is missing a comma after cwd: 'nested/' on the main github page.  Would you please add this comma when you get a chance.  I'm sure others will appreciate it.
Readme.md - (missing a comma after cwd: 'nested/')


Asking for all permissions on the first screen

Currently as soon as the picker is displayed all the permissions related to the selection methods are displayed, even if they are not related to the screen that is shown at launch.
For example even my launch screen being the library, when the picker is opened the permission to use the camera is already displayed.
I believe it would be interesting if the use permissions were only shown when really needed. If my launch screen is the library it only makes sense to ask permission for this access and if the user switches to the camera screen ask for the related permissions.
Thanks for the great lib.

Thought about it too.

Any idea how we can achieve this?

@DamascenoRafael Pretty busy this week to tackle any feature but I'll have time to give it a shot next week. Honestly don't know if we can request single permissions via Apple api. I'd have to look into it.

@DamascenoRafael I'm looking at it at the moment :)

Great @s4cha! If the first screen is .photo the permission for the library will not be requested. The problem seems to be only the .photo request (maybe .video too) that is always requested if it is between the screens.

@DamascenoRafael This is live as of 3.3.0 :) https://github.com/Yummypets/YPImagePicker/releases/tag/3.3.0


Uploading an avatar

I really miss the ability to upload an avatar for the user :(

I implemented this feature


update image tag to 1.8.2

Update chart post 1.8.2 release

@ckotzbauer Maybe you can help me figure out why the workflow fails? ^ :grimacing:

You have to increase the chart version.

You have to increase the chart version.

:see_no_evil: :pray:


[5.9][Macros] Fix visiting nested conformance macro declarations in SIL and IRGen.

Explanation: When expanding a conformance macro, the generated extension decls are added to the TopLevelDecls vector of the synthesized file unit to expose them to sf->getSynthesizedFile()->getTopLevelDecls(). There are two problems with this:

These decls are also visited via visitAuxiliaryDecls() for the purpose of type checking. This causes problems in code generation because the extensions are visited separately, and because SIL and IRGen assume nested auxiliary decls are members.

SILGen only emits top-level decls directly from the source file rather than its synthesized file. Auxiliary decls are visited here, but this doesn't work for nested conformance macros because the attached-to decl is not at the top-level, so macro-generated conformances for nested types never emit their descriptor.
To fix this in the short term, visit top-level decls in the synthesized file that are generated by conformance macros, and skip auxiliary extension decls when emitting type members. This fix is narrowly scoped to only impact macros, but in the future this warrants a more structural fix to better handle top-level decls in the synthesized file.

Scope: Only impacts macros.
Issue: rdar://107962528
Risk: Low.
Testing: Added a nested type with an attached conformance macro to test/Macros/macro_expand_conformance.swift.
Reviewer: @DougGregor
Main branch PR: https://github.com/apple/swift/pull/65231

@swift-ci please test


[AutoComplete] Fix the focus / blur issue

That's fixing my issue with my android webview. That should also fix

https://github.com/callemall/material-ui/issues/2299
https://github.com/callemall/material-ui/issues/3339
One part of https://github.com/callemall/material-ui/issues/2294
One part of https://github.com/callemall/material-ui/issues/3151

@yongxu Can you have a look?

This is ready to be reviewed. I have made a lot of changes.

This looks good to me. thanks a lot @oliviertassinari :+1:

@alitaheri This PR tooks me like 6 hours, I'm glad you like it :+1:.

I'm really busy today but excited for this!
If you two are comfortable, feel free to move on without me :+1:

If you two are comfortable

I am, I have spent the all day testing it and fixing some stuff.
@alitaheri Feel free to merge.

Great job @oliviertassinari :+1: Thanks a lot for taking the time :+1: This will be appreciated by a lot of people :heart_eyes:

Awesome :tada:. There is not time to lose. That's now in production https://splitme.net/account/add :grin:.

That was fast :sunglasses: :+1: :racehorse:

@oliviertassinari Looks Great. Didn't see this PR before it get merged, but it is awesome :+1:


Update installation/setup steps

The current install/setup steps are incorrect/outdated. Put together a better/leaner/cleaner setup story.
Probably a good idea to get the docker story fully figured out as well. @jonDowdle started on this a while back; need to finish it up now.

This has been completed in #98 and #97