小编Lau*_*tte的帖子

Instrument Netty的EventLoop用于确定性执行计划任务

我想用Netty EventLoop来测试:

  • 以确定的顺序运行任务.
  • 抓住计划任务的截止日期.
  • 快进虚拟时钟,触发执行截止日期的任务.

我知道EmbeddedChannel并且我在一些测试中使用它.但我想要的是单元测试和集成测试之间的问题,这些测试对于某些极端情况仍然是盲目的.断开连接 - 重新连接和ping方案会大量使用计划任务.我可以添加具有巨大延迟的确定性,但我不希望我的测试等待几秒或更长时间.因此,使用Netty EventLoop看起来就像是解决方案.

我已经编写了至少对我有用的代码.

  • 我修改ScheduledFutureTask#nanoTime为返回我的值.
  • 我得出NioEventLoopGroup所以我抓住任务截止日期.
  • 我改变了返回的值ScheduledFutureTask#nanoTime.

有趣的是,Netty代码只依赖于ScheduledFutureTask#nanoTime(伟大的设计!)返回的值,所以这是一个非常有限的变化.我使用ByteBuddy来避免复制粘贴Netty代码,但这并不重要.

一个非常简单的测试就像InstrumentedNioEventLoopGroupTest在调度1个任务时失败,因为它AbstractScheduledEventExecutor#pollScheduledTask(long)有一个空队列.

我发现每个NioEventLoop都有自己的任务队列,并且可能不会发生队列轮询,因为NioEventLoopGroup等待a Selector发出信号,这是有道理的.所以我将线程数NioEventLoopGroup增加到2.我也尝试设置ioRatio为1并安排更多任务,没有更好的结果.使用调试器,似乎我的任务总是"落在"未轮询的任务队列中.

有什么想法使这项工作?我正在使用Netty 4.1.24.Final.

ScheduledFutureTaskHack.java

package com.otcdlink.chiron.integration.harness;

import com.otcdlink.chiron.toolbox.ToStringTools;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.agent.ByteBuddyAgent;
import net.bytebuddy.dynamic.loading.ClassReloadingStrategy;
import net.bytebuddy.implementation.MethodDelegation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.concurrent.Future;
import java.util.function.LongSupplier;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static net.bytebuddy.matcher.ElementMatchers.isPackagePrivate; …
Run Code Online (Sandbox Code Playgroud)

java netty

11
推荐指数
1
解决办法
382
查看次数

Jetty日志中的SSL_NULL_WITH_NULL_NULL密码套件

我正在使用带有HTTPS和有效证书的Jetty,我不确定是否正确,因为密码套件似乎SSL_NULL_WITH_NULL_NULL在服务器日志中.但是,客户端日志看起来不错.

长话故事:我正在附加一个期望Jetty-7.6.10的Java样本和两个用于创建密钥库和信任库的脚本.

JettyHttpsForStackOverflow 一起运行客户端和服务器,或单独运行以解除日志.

create-chains.sh脚本创建密钥库和信任库.密钥库包含以从临时密钥库生成的根证书颁发机构结束的链.它使用证书颁发机构和中间证书复制真实案例.

create-single-autosigned.sh脚本也创建密钥库和信任库,但具有自签名证书.

请注意,它SSL_NULL_WITH_NULL_NULL显示为服务器的密码套件,包含两个证书链.

我认为服务器域名没有问题.对于在正确签名的证书中具有与专有名称匹配的域名的计算机上运行的服务器,我遇到了同样的问题.SSLLab确认我服务器上的SSL工作正常(B级),谷歌Chrome连接愉快.

我认为Jetty客户端没有问题.当我使用它时,它只是调用SSLContextFactory我正在设置创建一个SSLSocket.令人惊讶的是,在Jetty客户端日志中,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA似乎是正在使用的密码套件.

SSL_NULL_WITH_NULL_NULL进入Jetty服务器日志是否正常?如果没有,那该怎么办呢?

create-single-autosigned.sh

#!/bin/bash

rm  their-keystore.jks 2> /dev/null
rm  my-keystore.jks    2> /dev/null
rm  my-truststore.jks  2> /dev/null

echo "===================================================="
echo "Creating fake third-party chain ca2 -> ca1 -> ca ..."
echo "===================================================="

keytool -genkeypair -alias ca  -dname cn=ca                           \
  -validity 10000 -keyalg RSA -keysize 2048                           \
  -ext BasicConstraints:critical=ca:true,pathlen:10000                \
  -keystore their-keystore.jks -keypass Keypass -storepass Storepass

keytool -genkeypair -alias …
Run Code Online (Sandbox Code Playgroud)

java ssl jetty jsse ssl-certificate

6
推荐指数
1
解决办法
1万
查看次数

如何将Ansible的with_item与变量一起使用?

我正在尝试转换Ansible Playbook中列表项的某些字段。这是最简单的复制路径,跳过了转换。结果应与users变量相同。

---
# Run with:
# ansible-playbook -i "localhost," loop3.yml

- hosts: localhost
  connection: local
  gather_facts: false
  vars:
    users:
      - name: paul
        uid: 1
      - name: pete
        uid: 2
  tasks:
    - set_fact:
      args:
        useritem:
          name: '{{ item.name }}'
          uid:  '{{ item.uid }}'
      with_items:
        - users
      register: sf_result

    - debug: var=sf_result

    - set_fact:
        userslist: "{{ sf_result.results | map(attribute='ansible_facts.useritem') | list }}"

    - debug: var=userslist
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

TASK [set_fact useritem={u'name': u'{{ item.name }}', u'uid': u'{{ item.uid }}'}] ***
fatal: [localhost]: …
Run Code Online (Sandbox Code Playgroud)

ansible

3
推荐指数
1
解决办法
3859
查看次数

标签 统计

java ×2

ansible ×1

jetty ×1

jsse ×1

netty ×1

ssl ×1

ssl-certificate ×1